參考地址:
1, HTTP/1.1 存在的問題
- TCP 連接數限制
- 線頭阻塞 (Head Of Line Blocking) 問題
- Header 內容多,而且每次請求 Header 不會變化太多,沒有相應的壓縮傳輸優化方案
- 明文傳輸不安全。
- 爲了儘可能減少請求數,需要做合併文件、雪碧圖、資源內聯等優化工作
2,Http2.0 特點:
- 二進制分幀層 (Binary Framing Layer)(response 頭字段均小寫)
- 多路複用 (MultiPlexing) 在一個 TCP 連接上,每幀的 stream identifier 的標明這一幀屬於哪個流,然後在對方接收時,根據 stream identifier 拼接每個流的所有幀組成一整塊數據。 流的概念實現了單連接上多請求 - 響應並行,解決了線頭阻塞的問題,減少了 TCP 連接數量和 TCP 連接慢啓動造成的問題。
- http2 對於同一域名只需要創建一個連接
- 服務端推送 (Server Push) 瀏覽器發送一個請求,服務器主動向瀏覽器推送與這個請求相關的資源,這樣瀏覽器就不用發起後續請求。【省略後後續的get 時間】
- Header 壓縮 (HPACK) 使用 HPACK 算法來壓縮首部內容
- 應用層的重置連接
HTTP/1 來說,是通過設置 tcp segment 裏的 reset flag 來通知對端關閉連接的。這種方式會直接斷開連接,下次再發請求就必須重新建立連接。HTTP/2 引入 RST_STREAM 類型的 frame,可以在不斷開連接的前提下取消某個 request 的 stream。
-
請求(流的)優先級設置
-
流量控制
3, 流的狀態:idle reserved(local & remote ) open half-closed(local & remote ) closed; 以上也是流的生命週期。 其中reserved 都只能發送對應生命週期內的某些幀數據。
4,優化點:
- 開啓壓縮 配置 gzip 等可以使傳輸內容更小,傳輸速度更快
- 使用緩存
- CDN 加速
- 減少 DNS 查詢
- 減少重定向