我正在學習Socket Programming HOWTO并且作者在某個時候說
像 HTTP 這樣的協議只使用套接字進行一次傳輸。
是不是因為HTTP協議本身的設計?還是因為它是基于TCP的,所以基于它的所有協議(例如UDP)都必須使用一個套接字進行一次傳輸?
uj5u.com熱心網友回復:
此宣告是斷章取義的。背景關系是要指出 TCP 不是基于訊息的協議,而是非結構化的位元組流。并且要擁有訊息語意,需要有某種方法來確定訊息的結束位置。
然后以 HTTP 為例,其中一條訊息可能簡單地以連接關閉結束并指出??限制 - 即每個連接每個方向只有一條訊息。然后繼續描述如何設計沒有這種限制的協議,即每個連接有多個訊息。
HTTP 仍然可以這樣使用,即只有一個請求并以連接關閉結束。這是 HTTP 0.9 版本的設計,但仍然可以使用 HTTP/1 來完成。但是對于 HTTP/1,它也可以用于多個訊息,一個接一個。使用 HTTP/2,它可以并行處理多條訊息,通過單個 TCP 連接進行多路復用。HTTP/3 甚至不再使用 TCP。
所有基于 TCP 的協議每次傳輸都使用一個套接字嗎?
協議不限于每條訊息(“傳輸”)一個連接(“套接字”)。根據協議的設計,可以通過具有一些預先知道的訊息大小或明確的訊息分隔符來一個接一個地發送多個訊息。某些協議可能通過在 TCP 之上實作多路復用層來并行發送多條訊息。一些協議甚至可能并行使用多個 TCP 連接來傳遞單個訊息,即通過多個連接分發訊息。
uj5u.com熱心網友回復:
該宣告可能寫于 1996 年或更早。自 1997 年以來,HTTP 支持持久連接,為多個查詢重用相同的 TCP 連接和相同的套接字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401713.html
上一篇:在C 上使用套接字的http請求
