Http2, HTTP1.1 知識點收集
阿新 • • 發佈:2018-12-03
參考地址:
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 查詢
- 減少重定向