2014-02-10 84 views
0

假設我的瀏覽器發送一個HTTP請求到域,在這個請求完成之前,另一個不同的請求(通過ajax)被髮送到同一個域。由於第一個請求仍在繼續,尚未終止,這是否意味着第二個請求將不得不等待第一個請求才能完成,以便使用第一個請求使用的持久連接?如果是,如何防止這一點?如果我在第一個請求中有很長的流式連接,是否意味着第二個請求需要長時間停留?將保持活躍殺死異步連接

(讓我們假設瀏覽器的最大連接長度爲1,實際上我並不是很明白這個「最大連接長度」是什麼意思,這是否意味着當長連接超過最大連接數時,其餘連接都會變得不持久?混亂......)

任何人都可以解釋這一點嗎?

+0

您正在使用哪種瀏覽器,以及您在哪裏設置了「*最大持續連接*」? – Bergi

+0

看起來像這是由服務器體系結構決定的,您的服務器可以一次處理多個連接,還是一次處理一個連接。 – jfriend00

+0

@Bergi我不認爲我們可以設置最大持續連接,我們可以嗎?我參考這個維基頁面http://en.wikipedia.org/wiki/HTTP_persistent_connection#Use_in_web_browsers – GMsoF

回答

1

由於第一個請求仍在繼續且尚未終止,這是否意味着第二個請求將不得不等待第一個請求才能完成,以便使用第一個請求使用的持久連接?

不需要。這兩個請求仍然是異步並行的(除非服務器限制了這一點)。

HTTP Keep Alive僅意味着它們更快,因爲兩個請求都可以使用相同的連接,特別是在流水線連接時。

但是,如果沒有流水線操作,瀏覽器也可以決定爲第二個請求打開第二個連接,而不是等待第一個請求完成並重新使用它的連接。詳情請參閱Under what circumstances will my browser attempt to re-use a TCP connection for multiple requests?

我真的不明白這個「最大持續連接」的作用。這是否意味着當持久連接超過最大數量時,其餘連接將變爲非持久連接?

否。當達到限制時,新的請求將不得不等待,直到池中的連接再次變爲可用。

+0

這是否意味着即使第一個請求是流式傳輸並且長時間佔用持久連接,第二個請求仍然有機會間歇性地進入第一個持久連接(循環?)(假設其中一個是最大值,而瀏覽器不會創建第二個持續連接) – GMsoF

+1

我想是的,是的。 – Bergi