標籤:

瀏覽器能夠使用一次TCP連接多次發起http請求,那麼瀏覽器是怎麼區分這多個請求的響應的?

瀏覽器能夠使用一次TCP連接多次發起http請求,那麼瀏覽器是怎麼區分這多個請求的響應的?因為響應並沒有標誌可以表明它是對應哪個請求的。


HTTP/2 之前,一個連接上的請求/響應必須是按順序來的,所以按順序對應即可。即使是pipelining也仍然要保證順序。
HTTP/2 是可以亂序的。機制是通過frame上的Stream Identifier來標識。


一個流,傳多個或多種數據肯定會有分包機制。

常見的有:
1.定長數據包
2.包含特定分隔符的變長數據包
3.先傳長度再傳包體的變長數據包
4.分片傳輸(其實就是分時傳輸,用來解決並行傳輸問題)


計算機軟體設計講究分層,HTTP基於TCP,瀏覽器基於HTTP,上層不關心底層怎麼實現的。
HTTP1.0 TCP不能復用,一般伺服器在響應完請求後主動關閉連接。
HTTP1.1 增加了TCP復用,在一個請求結束後,客戶端還可以復用這個TCP,所以HTTP請求是一個接著一個的。
HTTP2.0 增加了多路復用,增加了一個幀的概念,通過一次TCP連接,可以把多個HTTP請求封裝到不同的幀,發送到服務端,伺服器分別對請求做出響應,客戶端收到響應後,根據幀的標識,分別交給請求發起者,題主想問的應該是這個。


兄弟,知道你的想法,因為http頭中並不包含類似於msgId這樣的東西,所以是順序返回請求的,我看的是http權威指南,P105


使用的是流的序號標示!


HTTP權威指南中有詳細說明


推薦閱讀:

學習網路編程,想寫個聊天伺服器練練,想實現客戶端之間的通信,但是卡殼了?
1.1.1.1 是哪裡的 IP?
為什麼TCP的MSS協商沒有按照小的來?
關於IP數據報轉發的疑問?
個人計算機裡面包含網路7層協議的所有協議嗎,每一層分別對應哪個部分?

TAG:HTTP | TCPIP |