HTTP/2 資料彙總

隨着今年 5 月 14 日 HTTP/2 協議正式版的發佈,愈來愈多的網站開始部署 HTTP/2 了。我對 HTTP 協議一直都比較有興趣,本文彙總一些關於 HTTP/2 的資料以及我寫過的文章,會持續更新。若是你們有任何問題,歡迎留言交流探討。html

協議

HTTP/2 協議由如下兩個 RFC 組成:nginx

網上有一份由百度 FEX 翻譯的「h2-13 中文版」,更新於一年前,也能夠看看。h2-13 說明這是協議的第 13 版草案,HTTP/2 一共經歷了 00~17 共 18 版草案才正式發佈。git

不少支持 HTTP/2 的 Web 服務器和客戶端,都會標註出本身支持的具體版本,例如 h二、h2-14,分別表示本身支持正式版、第 14 版草案。有時候還會看到某個軟件寫着支持 h2c,這是指它支持運行於非加密通道之上的 HTTP/2(HTTP/2 Cleartext)。github

HTTP/2 協議是從 SPDY 演變而來,SPDY 已經完成了使命並很快就會退出歷史舞臺(例如 Chrome 將在「2016 年初結束對 SPDY 的支持」;Nginx 在今年年末正式支持 HTTP/2 後,也再也不支持 SPDY),故本文再也不討論 SPDY。web

在「HTTP/2 官網」能夠找到更多有關 HTTP/2 協議的資料。算法

部署

根據 caniuse 的統計,目前支持 HTTP/2 的瀏覽器有 Chrome 41+、Firefox 36+、Safari 9+、Windows 10 上的 IE 11 和 Edge。服務器方面則有 F五、H2O、nghttp2 等數十種選擇,各類語言實現的都有。Nginx 則相對謹慎一些,在「本月初才提供對 HTTP/2 的實驗性支持」,年末纔會正式支持。這裏有一份「HTTP/2 服務器及客戶端」的完整清單。chrome

Akamai 這個頁面」提供了 HTTP/1 和 HTTP/2 的對比,你們能夠用本身的瀏覽器測試一下。瀏覽器

升級到 HTTP/2 以後,不支持 HTTP/2 的瀏覽器還能正常訪問麼?若是有疑問,推薦閱讀:談談 HTTP/2 的協議協商機制安全

HTTP/2 協議自己並無要求必須基於 TLS 部署,但當前全部瀏覽器均只支持 HTTP/2 Over TLS。這樣作一方面更安全,另外一方面利用 TLS 的加密機制能夠更好地穿透網絡中間節點。性能優化

因此若是要部署 HTTP/2,首先須要將網站升級爲 HTTPS。這個過程涉及到購買證書、生成證書和配置 Web 服務器等幾個步驟,網上不少教程,這裏略過。有兩點須要注意:1)選擇層級少的證書(點擊 Chrome 地址欄的綠色小鎖,在詳情中的證書信息裏能夠看到層級);2)必定不要使用 SHA1 算法的證書。本站有很多關於 HTTPS 和證書的文章,供參考:

本博客前後使用過 H2O 和 Nginx 這兩個服務器提供 HTTP/2 服務,下面是具體的介紹:

若是你在使用 Apache,能夠參考這篇文章啓用 HTTP/2。

對於喜歡折騰的人來講,Caddy 應該是個不錯的選擇,這個基於 Go 語言開發的 Web Server 對 HTTP/2 和 HTTPS 有着良好的支持,最近還開始支持 QUIC 協議。

另外,如今國外一些 CDN 也開始支持 HTTP/2 了,例如 KeyCDN,能夠根據本身實際須要選用。KeyCDN 寫過一篇描述自家和全球 HTTP/2 部署狀況統計的文章:HTTP/2 Statistics: KeyCDN Report on HTTP/2 Distribution

HTTP/2 協議中對 TLS 有了更嚴格的限制,例如 HTTP/2 中只能使用 TLSv1.2+,還禁用了幾百種 CipherSuite。若是你遇到了啓用 HTTP/2 致使網站打不開的問題,必定要看看《從啓用 HTTP/2 致使網站沒法訪問提及》這篇文章。

Google 在 Chrome 51 中移除了 NPN,若是你的服務器不支持 ALPN,在 Chrome 51+ 中沒法協商到 HTTP/2,《爲何咱們應該儘快支持 ALPN?》這篇文章裏有更多描述。

Nginx 1.9.15~1.10.x 在處理 HTTP/2 POST 時考慮不周,致使特定場景下一些瀏覽器會產生「沒法鏈接到服務器」錯誤。《談談 Nginx 的 HTTP/2 POST Bug》這篇文章裏有詳細說明。

優化

將網站升級爲 HTTPS 以後,多了 TLS 握手過程,以後的所有流量都會加密,若是沒有作好優化確定會比以前更慢。實際上,如今 TLS 已經很快了,這裏有一個性能專家 igrigorik 創建的網站:Is TLS Fast Yet?,能夠關注下。

下面幾篇對 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 中的 Server Push,能夠減小網絡延遲對性能帶來的影響,優化首次訪問速度。但它可能形成流量浪費,具體細節請看個人這兩篇文章:

HTTP/2 中的頭部壓縮,能夠減小頭部體積,提升傳輸效率。有關這項技術原理和實現的詳細介紹,請看個人這篇文章:

目前我沒有找到只針對 HTTP/2 的測試工具,下面性能及安全在線測試網站的結果能夠做爲參考:

調試

不一樣於 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」和個人這篇文章:調試 HTTP/2 流量。使用 nghttp2 也能夠方便地調試 HTTP/2 流量,詳情見這裏

更多調試工具能夠在 CloudFlare 這篇文章裏找到:Tools for debugging, testing and using HTTP/2

書籍

如下書籍都有可供免費閱讀的電子版:

最近發現一個 HTTP/2 日文網站:http2.info,列舉了不少有關 HTTP/2 的資料,懂日語的同窗能夠去看看。

最後放上我最近作的一個關於 HTTP/2 的分享:《HTTP/2:新的機遇與挑戰》。

本文連接:https://imququ.com/post/http2-resource.html參與評論 »

--EOF--

專題「HTTP/2 相關」的其餘文章 »

相關文章
相關標籤/搜索