簡析 HTTP 2.0 多路復用


HTTP 1.0

在HTTP1.0版本,存在一個問題:建立的一次連接,只有包含一個請求響應(也就是對應一個資源)。

如果有多個請求,那么效率就會很低。

HTTP 1.1

在HTTP 1.1 中 connection: keep-alive 是默認開啟的。

改進一:連接復用

一次連接,可以有多個請求響應(對應多個資源)。

改進二:管線化傳輸(pipeline)

下一次的請求不需要等待上一個響應來之后再發送。

但響應的順序是不變的,FIFO(先進先出)

依舊存在的問題:

  • 請求是按次序的,后來者需要排隊等待。
  • 請求頭大多類似,重復傳輸浪費資源。
  • 同一域名的瀏覽器有最大並行請求限制。

HTTP 2.0

多路復用

由於 HTTP 1.X 是基於文本的,因為是文本,就導致了它必須是個整體,在傳輸是不可切割的,只能整體去傳。
但 HTTP 2.0 是基於二進制流的。有兩個非常重要的概念,分別是幀(frame)和流(stream)

  • 幀代表着最小的數據單位,每個幀會標識出該幀屬於哪個流。
  • 流就是多個幀組成的數據流。

將 HTTP 消息分解為獨立的幀,交錯發送,然后在另一端重新組裝。

  • 並行交錯地發送多個請求,請求之間互不影響。
  • 並行交錯地發送多個響應,響應之間互不干擾。
  • 使用一個連接並行發送多個請求和響應。

簡單的來說: 在同一個TCP連接中,同一時刻可以發送多個請求和響應,且不用按照順序一一對應。

之前是同一個連接只能用一次, 如果開啟了keep-alive,雖然可以用多次,但是同一時刻只能有一個HTTP請求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM