我使用Firefox,但我想知道瀏覽器如何決定這一般。在什麼情況下,我的瀏覽器會嘗試重複使用TCP連接來處理多個請求?
看來,當我兩次訪問同一URL在很短的時間量,我的瀏覽器嘗試重新使用這兩個請求的TCP相同的連接(這就是所謂的保活)。然而,當我訪問兩個不同的網址(但仍由同一個服務器提供服務),瀏覽器有時決定開闢爲每個請求一個新的連接。顯然,瀏覽器不使用每URL連接策略。
我問這個,因爲我想實現使用長輪詢的Web服務。我可以想象,用戶可能想要在同一瀏覽器的多個選項卡中打開此服務。但是,保持活動狀態下,第二個長輪詢請求不會被髮送,直到第一個長輪詢請求完成(至少在Firefox中),因爲瀏覽器正試圖將它們都推入同一個套接字中,而當我設計了這項服務。即使瀏覽器實現管道,我也無法在迴應第一個請求之前響應第二個請求,因爲HTTP要求我按順序完成響應。
雖然我告訴Firefox來的請求發送到服務器第二次,我相信它,因爲它要等待第一個請求的完成,以便它可以重新使用該連接實際上並沒有發出一個請求。這是一個功能,而不是錯誤,對嗎? – Mark
也許對於相同的URL,它會嘗試使用相同的連接,但對於URL,它會嘗試在池中選擇另一個連接? – Mark
如果您的測試是向同一個URL發送2個「併發」HTTP請求,您可以將其看作「序列化」或通過2個不同的TCP連接發送。但是你並沒有看到它們流水線化。會發生什麼,現在是執行dependend.E.g。瀏覽器可能會選擇重用池中的連接,或通過新連接發送第二個請求。兩種方法都是正確的,因爲HTTP是一種「無狀態」協議。如果您的實現取決於這些細節,那麼恕我直言,有一個缺陷在你的設計中。可能你應該寫更多關於你想要達到的目標。 – Cratylus