1. 程式人生 > >Http2, HTTP1.1 知識點收集

Http2, HTTP1.1 知識點收集

參考地址:

  1. https://blog.wangriyu.wang/2018/05-HTTP2.html
  2. https://www.jianshu.com/p/e57ca4fec26f

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 查詢
  •  減少重定向