**HTTP/2 改變了什么?帶來了哪些提升?**
HTTP/1.x 公認最大的性能瓶頸就是 TCP 連接數過多。建立一個 TCP 連接需要三次握手,也就是三次往返于服務器和客戶端之間。三次握手所需的時間無法用提升帶寬來彌補。而現在的網頁一般都內容豐富,在 HTTP/1.x 下載完整個網頁一般需要很多很多個 TCP 連接。如果用開發者工具查看網絡加載流,可以看到阻塞時間(也叫做 Time To?First Byte,[參考文獻](https://www.nginx.com/http2-ebook/ "High Performance Browser Network Special Edition: Selected Content For HTTP2")),尤其是小資源的阻塞時間占比非常大。此外,每次 TCP 連接都需要傳遞 HTTP Header 信息,也是一筆帶寬開銷。這還不夠,HTTP/1.x 由于基本是無腦按順序加載資源,需要瀏覽器和前端工程師對預加載、加載優先級等做很多額外的工作。
[](http://www.bokeyy.com/wp-content/uploads/2015/12/d811a507-3599-4630-9add-bbf6e2ec8fa2.jpg)
HTTP/1.x 協議下綠色的阻塞時間延遲可觀
而 HTTP/2 解決了這個問題。相比之下,HTTP/2 一方面復用同一IP且同一證書下的一個 TCP 連接,另一方面壓縮了 HTTP Header,最后還提供了 Server Push 特性,解決了這些問題。
更多可翻閱?[HTTPS、SPDY和HTTP/2的性能比較](http://www.infoq.com/cn/news/2015/02/https-spdy-http2-comparison)?[某個TCP連接數非常多的網頁性能實測比較](http://www.webpagetest.org/video/compare.php?tests=150324_RB_60944f6da93253f7ecb9148584ebee11,150324_MR_b218a2ade1b90e679a525964061ef7b6)。