HTTP/2 資料匯總
隨著今年 5 月 14 日 HTTP/2 協議正式版的發布,越來越多的網站開始部署 HTTP/2 了。我對 HTTP 協議一直都比較有興趣,本文匯總一些關于 HTTP/2 的資料以及我寫過的文章,會持續更新。如果大家有任何問題,歡迎留言交流探討。
協議
HTTP/2 協議由以下兩個 RFC 組成:
- RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)
- RFC 7541 - HPACK: Header Compression for HTTP/2
網上有一份由百度 FEX 翻譯的「h2-13 中文版」,更新于一年前,也可以看看。h2-13 說明這是協議的第 13 版草案,HTTP/2 一共經歷了 00~17 共 18 版草案才正式發布。
很多支持 HTTP/2 的 Web 服務器和客戶端,都會標注出自己支持的具體版本,例如 h2、h2-14,分別表示自己支持正式版、第 14 版草案。有時候還會看到某個軟件寫著支持 h2c,這是指它支持運行于非加密通道之上的 HTTP/2(HTTP/2 Cleartext)。
HTTP/2 協議是從 SPDY 演變而來,SPDY 已經完成了使命并很快就會退出歷史舞臺(例如 Chrome 將在「2016 年初結束對 SPDY 的支持」;Nginx 在今年年底正式支持 HTTP/2 后,也不再支持 SPDY),故本文不再討論 SPDY。
在「HTTP/2 官網」可以找到更多有關 HTTP/2 協議的資料。
部署
根據 caniuse 的統計,目前支持 HTTP/2 的瀏覽器有 Chrome 41+、Firefox 36+、Safari 9+、Windows 10 上的 IE 11 和 Edge。服務器方面則有 F5、H2O、nghttp2 等數十種選擇,各種語言實現的都有。Nginx 則相對謹慎一些,在「本月初才提供對 HTTP/2 的實驗性支持」,年底才會正式支持。這里有一份「HTTP/2 服務器及客戶端」的完整清單。
「Akamai 這個頁面」提供了 HTTP/1 和 HTTP/2 的對比,大家可以用自己的瀏覽器測試一下。
HTTP/2 協議本身并沒有要求必須基于 TLS 部署,但是 Chrome 和 Firefox 這兩大瀏覽器均表示只支持 HTTP/2 Over TLS。這樣做一方面更安全,另一方面利用 TLS 的加密機制可以更好地穿透網絡中間節點。
所以如果要部署 HTTP/2,首先需要將網站升級為 HTTPS。這個過程涉及到購買證書、生成證書和配置 Web 服務器等幾個步驟,網上很多教程,這里略過。有兩點需要注意:1)選擇層級少的證書(點擊 Chrome 地址欄的綠色小鎖,查看證書信息就可以看到層級);2)一定不要使用 SHA1 算法的證書。
本博客先后使用過 H2O 和 Nginx 這兩個服務器提供 HTTP/2 服務,下面是具體的介紹:
優化
將網站升級為 HTTPS 之后,多了 TLS 握手過程,如果沒有做好優化肯定會比之前更慢。下面兩篇對 Nginx 的配置心得,是我在本博客實踐之后寫的,可以先看看:
HTTP/2 究竟會給 WPO(Web Performance Optimization)帶來什么,我也寫了一系列文章來介紹:
在 Velocity 2015 ? SC 會議上,來自 Google 的 Ilya Grigorik 分享了「HTTP/2 is here, let's optimize! - Yesterday's perf best-practices are today's HTTP/2 anti-patterns」話題,重點講述 HTTP/2 與 HTTP/1 關于 WPO 的相同和不同之處,值得推薦。
目前我沒有找到只針對 HTTP/2 的性能測試工具,下面在線工具的結果可以作為參考:
- Qualys SSL Server Test,用于測試 SSL 服務端;
- WebPagetest,老牌網站性能測試工具;
- GTmetrix,使用 PageSpeed、YSlow 和其他工具全面測試網站性能;
調試
不同于 HTTP/1 的文本格式報文,HTTP/2 傳輸的都是二進制幀,調試起來要麻煩一些。
首先,要辨別某個網站是否啟用了 HTTP/2,可以通過瀏覽器開發工具的「網絡」面板中的 Protocol 字段查看。也可以通過擴展在瀏覽器地址欄顯示當前的協議類型,HTTP/2 指示器擴展:Chrome 版、Firefox 版。
在 Chrome 地址欄輸入chrome://net-internals/#http2,打開 Chrome 自帶的 HTTP/2 查看工具,可以很方便地查看 HTTP/2 幀信息。
新版 Wireshark(dev 1.99)也可以調試 HTTP/2,詳細介紹請查看「官網 Wiki」和這篇文章:HTTP2 traffic in Wireshark。
書籍
以下書籍都有可供免費閱讀的電子版:
- http2 explained(中文翻譯)
- HTTP/2: A New Excerpt from High Performance Browser Networking(即「High Performance Browser Networking」第十二章,Ilya Grigorik 編寫)
本文鏈接:https://imququ.com/post/http2-resource.html
--EOF--