瀏覽器HTTP請求並發數和TCP連接的關系


面試題目(頭條):

  1. 網頁中的圖片資源為什么分放在不同的域名下?

  2. 瀏覽器與服務器建立一個TCP連接后,是否會在完成一個http請求后斷開?什么條件下會斷開?

  3. 一個TCP連接可以同時發送幾個HTTP請求?

  4. 瀏覽器http請求的並發性是如何體現的?並發請求的數量有沒有限制?

答案解析:

第一個問題:

網頁中的圖片資源為什么分放在不同的域名下?

瀏覽器對並發請求的數目限制是針對域名的,即針對同一域名(包括二級域名)在同一時間支持的並發請求數量的限制。如果請求數目超出限制,則會阻塞。因此,網站中對一些靜態資源,使用不同的一級域名,可以提升瀏覽器並行請求的數目,加速界面資源的獲取速度。

第二個問題

瀏覽器與服務器建立一個TCP連接后,是否會在完成一個http請求后斷開?什么條件下會斷開?

HTTP/1.0中,一個http請求收到服務器響應后,會斷開對應的TCP連接。這樣每次請求,都需要重新建立TCP連接,這樣一直重復建立和斷開的過程,比較耗時。所以為了充分利用TCP連接,可以設置頭字段Connection: keep-alive,這樣http請求完成后,就不會斷開當前的TCP連接,后續的http請求可以使用當前TCP連接進行通信。

640?wx_fmt=png

第一次訪問有初始化連接和SSL開銷

640?wx_fmt=png

初始化連接和SSL開銷消失了,說明使用的是同一個TCP連接。

HTTP/1.1Connection寫入了標准,默認值為keep-alive。除非強制設置為Connection: close,才會在請求后斷開TCP連接。

所以這一題的答案就是:默認情況下建立的TCP連接不會斷開,只有在請求頭中設置Connection: close才會在請求后關閉TCP連接。

第三個問題

一個TCP連接可以同時發送幾個HTTP請求?

HTTP/1.1中,單個TCP連接,在同一時間只能處理一個http請求,雖然存在Pipelining技術支持多個請求同時發送,但由於實踐中存在很多問題無法解決,所以瀏覽器默認是關閉,所以可以認為是不支持同時多個請求。

HTTP2提供了多路傳輸功能,多個http請求,可以同時在同一個TCP連接中進行傳輸。

第四個問題

瀏覽器http請求的並發性是如何體現的?並發請求的數量有沒有限制?

頁面資源請求時,瀏覽器會同時和服務器建立多個TCP連接,在同一個TCP連接上順序處理多個HTTP請求。所以瀏覽器的並發性就體現在可以建立多個TCP連接,來支持多個http同時請求。

Chrome瀏覽器最多允許對同一個域名Host建立6個TCP連接,不同的瀏覽器有所區別。

補充

如果圖片都是HTTPS的連接,並且在同一域名下,瀏覽器會先和服務器協商使用HTTP2Multiplexing功能進行多路傳輸,不過未必所有的掛在這個域名下的資源都會使用同一個TCP連接。如果用不了HTTPS或者HTTP2(HTTP2是在HTTPS上實現的),那么瀏覽器會就在同一個host建立多個TCP連接,每一個TCP連接進行順序請求資源。

轉載於:瀏覽器HTTP請求並發數和TCP連接的關系_全棧者 的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM