Networking

HTTP 是否適用於持久或非持久連接?

  • July 28, 2020

我正在閱讀 Kurose 的*“電腦網路 - 自上而下的方法”*,並來到他們解釋 HTTP 與非持久連接與持久連接之間差異的部分。

在深入細節之前,他們說

儘管 HTTP 在其預設模式下使用持久連接,但 HTTP 客戶端和伺服器可以配置為使用非持久連接。

據我了解,使用了持久連接。但是,在非持久部分,他們說

在預設模式下,大多數瀏覽器打開 5 到 10 個並行 TCP 連接,每個連接處理一個請求-響應事務。

另一方面,在持久部分,他們說:

通常,HTTP 伺服器會在一段時間(可配置的超時間隔)未使用時關閉連接。當伺服器接收到背靠背請求時,它會背靠背發送對象。HTTP 的預設模式使用帶有管道的持久連接。最近,HTTP/2$$ RFC 7540 $$建立在 HTTP 1.1 之上,允許多個請求和回复在同一個連接中交錯,以及在此連接中優先考慮 HTTP 消息請求和回复的機制。

我很困惑。我能看到這個工作的唯一方法是:雖然瀏覽器可能會打開多個連接並因此並行接收數據,但這些連接中的每一個都是持久的。這有道理嗎?還是我錯過/誤解了什麼?

提前致謝!

Mozilla 關於 HTTP 協議的頁面非常準確。連接標頭解釋瞭如何處理連接。

在 HTTP/1.0 中,響應發送後預設關閉連接。

在 HTTP/1.1 中,預設情況下連接是持久的。

瀏覽器使用 HTTP/1.1 打開了多個連接,否則伺服器一次只能發送一個文件,這會導致顯示完整頁面的延遲。這種方法的缺點是額外的 TCP 握手和慢啟動機制,這限制了吞吐量。

HTTP/2 通過引入多路復用連接改進了這一點,消除了額外的 TCP 握手和對吞吐量的慢啟動影響。

連接持久性和多個請求是相互獨立的。

瀏覽器也可以做不同的事情。

引用自:https://serverfault.com/questions/1027090