[英]Http persistent connections limit
Clients that use persistent connections SHOULD limit the number of simultaneous
connections that they maintain to a given server. A single-user client SHOULD
NOT maintain more than 2 connections with any server or proxy.
[..]
我對“應該”特別不確定……它是什么意思?為什么?
I know that HTTP persistent connections, also called HTTP keep-alive,are the idea of using the same TCP connection to send and receive multiple HTTP requests/responses, as opposed to opening a new one for every single request/response pair. 我知道使用持久連接對於提高 HTTP 性能非常重要。
假設我有一個 HTML 頁面,其中包含以下圖像參考:
<img src="http://example.com/image1.gif"/>
<img src="http://example.com/image2.gif"/>
<img src="http://example.com/image3.gif"/>
<img src="http://example.com/image4.gif"/>
我的服務器的 keep-alive 指令已打開:就持久連接而言,這里發生了什么?與以下 2 個同時連接每服務器限制相關的優化規則/技巧是否有效?
<img src="http://example.com/image1.gif"/>
<img src="http://example.com/image2.gif"/>
<img src="http://example2.com/image3.gif"/>
<img src="http://example2.com/image4.gif"/>
謝謝
客戶端可以使用多個連接來並行下載資源。 例如,在您的示例中,它可能決定在兩個連接上同時下載image1.gif
和image2.gif
。 如果我們假設image1.gif
首先完成,那么它將在該連接上排隊image3.gif
。 等等。
我沒有證據證明這一點,但我強烈懷疑大多數瀏覽器在下載頁面上的所有資源后會關閉所有連接。 如果用戶點擊另一個頁面,它將打開新的連接。
兩個連接限制比什么都重要。 如果願意,沒有什么可以阻止瀏覽器打開 50。 但是,在這個級別上,帶寬使用是限制因素,因此大多數瀏覽器(我懷疑)將自己限制為少數幾個連接。
同樣,沒有什么特別的東西可以阻止它們,但是擁有許多連接的回報會遞減。
不要把“應該”看得太認真。 IE 在某些時候曾經只允許 2 個同時連接。 即使在那時,也可以選擇取消限制(通過“黑客”)。
目前,在大多數瀏覽器(包括 firefox、safari)中,限制為 8。 IE8 的每個主機限制為 6 個連接。
可以想象,每台主機 2 個連接太少了。 您將無法從主機加載頁面,其中有 2 次來自同一主機的持續下載!
如果您使用連接:keep-alive header,您的所有五個圖像都將加載到同一個 TCP 連接上,而不是終止連接並重新建立連接,以防連接:關閉。
這是低效的,因為每次請求圖像時都必須重新進行三路 TCP 握手!
在 HTTP 1.1 下,所有連接都保持活動狀態,除非另有說明,否則以下 header: 連接:關閉
另一方面,您還有 HTTP 流水線(請參閱 Mike Caron 的回答),它不會在發送另一個請求之前等待一個請求返回。 這是由 firefox 實現的(您可以在 about:config 中看到/禁用),但這與每個主機的最大連接數不同。
另外:如果您不使用流水線的持久連接,您將建立多個連接。 在關閉前一個請求之前發送一個請求。 由於最大連接數限制,這將阻塞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.