我從來沒有想過這一點,但現在我對幕後的一些基本事情感興趣。 1)網路伺服器是否在每次請求後關閉連線? 2)當我打開更多瀏覽器視窗並且所有請求資料都來自某個網路伺服器時,網路伺服器是否使用某種標準套接字通訊來識別哪個連線正在請求什麼? 3)如果使用者數量多於可用連接埠怎麼辦(例如同時請求 66k 的東西)
謝謝 :)
答案1
- 取決於請求使用的 HTTP 版本。當伺服器完成將回應傳送回使用者代理程式時,HTTP 1.0 連線將立即關閉。 HTTP1.1 增加了對 keepalive 的支持,這使得套接字連接在回應返回到用戶代理後保持開啟狀態。在這種情況下,用戶代理會發送 Connection: Keep-Alive HTTP 標頭,表示它希望保持打開的連接,這意味著它將發送更多請求。
- 是的。這是基本的套接字功能。用戶端在未使用的本機連接埠(通常為高連接埠)上開啟套接字,並嘗試與遠端主機上的特定目標連接埠(例如:HTTP 的 80)開啟連線。用戶端建立的每個其他連線都會在不同的連接埠上開啟本機套接字,但仍可嘗試在遠端主機上的相同連接埠上建立連線。
- 伺服器上的偵聽器進程將產生工作進程來處理多個傳入請求,從而使偵聽器可以自由地處理傳入請求。大多數 http 伺服器都有一個設定選項來控制要處理的同時請求的數量。
答案2
1) 一般情況下,每個頁面請求僅限於一個開啟和關閉的連線。
2) 您的電腦會針對發出的每個請求變更其來源連接埠。伺服器使用 IP/來源連接埠組合來追蹤哪些請求來自哪些主機
3) 伺服器正在回答連接埠 80 上的所有 HTTP 請求。
答案3
1) 大多數現代網頁伺服器都支援 Keepalive,因此如果瀏覽器支援它,網頁伺服器將滿足每個連接多個請求。
http://en.wikipedia.org/wiki/HTTP_persistent_connection
2)是的,每個連線都有自己的套接字,這是一個IP:PORT對。
http://en.wikipedia.org/wiki/TCP_sockets
3) 如果您有 65,535 人同時從單一伺服器發出請求,您需要退一步考慮一下您在做什麼! :) 說真的,除非你非常幸運,否則你會覺得在遇到這個問題之前需要進行負載平衡。您可能很快就會遇到的一個問題是文件描述符用完。 bash 中的預設值為 1024(請參閱 bash 線上說明頁中的「ulimit」)。