HTTP1.1
HTTP1.1中引入了長連接,允許多個連接復用一個TCP連接,
當多個請求先后呼叫HTTP發送的時候,如果前一個請求不回應的話,后一個請求是不會發送的,
所以如果前一個回應阻塞的話,后邊的請求也會被迫阻塞,叫做隊頭阻塞,
為什么要嚴格控制回傳順序呢?
因為假如不按照FIFO回傳回應,就無法區分回傳的回應頭對應哪個HTTP請求頭了,
HTTP2.0
HTTP2.0時,引入了幀、流的概念,
HTTP2是基于TCP的,HTTP2允許多個請求不按照先后順序發送資料,并允許穿插的發送資料,也就是每次發送一個幀,
那么怎么區分幀屬于哪個HTTP請求呢?
會對每個HTTP請求進行編號,然后再幀中插入對應的HTTP編號和其在HTTP請求中的位置序號,然后發送到服務器,服務器根據HTTP編號和位置序號來將幀重組,然后同時亂序的發送應答,客戶端也通過HTTP編號和位置序號來重組幀,
這樣就避免了HTTP層面的隊頭阻塞,
但是仍無法解決TCP的隊頭阻塞,
TCP由于引入了滑動視窗,并且每次可以發送多個資料,并且可以亂序接受,當序號大的資料先到達后,仍然不能被應用程式讀取,需要等到序號靠前的資料到了之后,才能被應用程式讀取,這也出現了隊頭阻塞,
這個隊頭阻塞是TCP實作可靠傳輸的副作用,無法解決,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/301488.html
標籤:其他
上一篇:HTTP報文結構詳解
下一篇:【計算機網路】計算機網路概述
