待解決問題:
1. 瀏覽器在與伺服器建立一tcp連線後是否會在一次http請求結束後關閉該tcp連線?如果會則何時會斷開?
http/1.1之前,乙個伺服器傳送一http響應後會關閉tcp連線,下次請求則會重新建立、關閉tcp連線,代價太大,在http/1.1之後第一次http響應結束後會在一定時間內保留tcp連線,這樣第二次請求時長大大降低.
上圖對比發現第二次訪問省略了ssl開銷,initial connection(初始化連線)時間,這也是為什麼短時間內第二次訪問該url時間時長大大減少之原因.
2. 乙個tcp連線可以對應多少http請求?
接上乙個答案,乙個tcp連線在保活條件下(connection的keepalive:open)是可以傳送多個http請求的.
3. 乙個tcp連線中http請求可以打包傳送或者響應嗎(例三個請求一起傳送,然後三個響應一起接收)?
pipelining了解下,請求:a、b、c 響應:a、b、c 不過存在乙個問題,假設a請求時長很久那麼等候的b,c請求都需要等待a求情完成後再開始,顯然不合適,所以瀏覽器預設關閉pipeling.http2 提供了 multiplexing 多路傳輸特性即io多路復用技術.使用了select、epoll等方式來降低阻塞等待,select、epoll同時監控多個檔案描述符,當監控中的任何乙個檔案描述符有問題時,就立刻返回套接字可讀,呼叫recvfrom處理資料。阻塞io只能阻塞乙個io操作,而select能阻塞多個io操作所以稱之為io多路復用。從select只能知道有io操作,不能知道是哪個流,所以需要無差別輪詢。而epoll會把哪個流發生了怎樣的i/o事件通知我們,時間複雜度降低為o(1)。
4. 瀏覽器對同一host建立tcp連線數量有限制嗎?
如果都是 https 連線並且在同乙個網域名稱下,那麼瀏覽器在 ssl 握手之後會和伺服器商量能不能用 http2,如果能的話就使用 multiplexing 功能在這個連線上進行多路傳輸。不過也未必會所有掛在這個網域名稱的資源都會使用乙個 tcp 連線去獲取,但是可以確定的是 multiplexing 很可能會被用到。
如果發現用不了 http2 呢?或者用不了 https(現實中的 http2 都是在 https 上實現的,所以也就是只能使用 http/1.1)。那瀏覽器就會在乙個 host 上建立多個 tcp 連線,連線數量的最大限制取決於瀏覽器設定,這些連線會在空閒的時候被瀏覽器用來傳送新的請求,如果所有的連線都正在傳送請求呢?那其他的請求就只能等等了。
借鑑自: 小光
乙個 TCP 連線可以發多少個 HTTP 請求
在 http 1.0 中,乙個伺服器在傳送完乙個 http 響應後,會斷開 tcp 鏈結。但是這樣每次請求都會重新建立和斷開 tcp 連線,代價過大。所以雖然標準中沒有設定,某些伺服器對 connection keep alive 的 header 進行了支援。意思是說,完成這個 http 請求之後...
乙個TCP連線可以發多少個HTTP請求
一 從url被輸入瀏覽器到頁面展現,這個過程中發生了什麼?二 現代瀏覽器與伺服器建立乙個tcp連線後,是否會在乙個http請求完成後斷開?什麼情況下會斷開?2.http 1.0會斷開,除非設定connection keep alive 3.http 1.1不會斷開,不會再次進行初始化連線和ssl,除...
乙個TCP 連線可以發多少個 HTTP 請求呢?
dns伺服器請求解析 檢查host檔案 建立tcp連線,三次握手 傳送http請求,請求行 請求頭部 空行和請求資料4部分組 伺服器返回,伺服器將資源複本寫到tcp套接字,由客戶端讀取。乙個響應由狀態行 響應頭部 空行和響應資料4部分組成 主動釋放or延時釋放 瀏覽器進行渲染 現代瀏覽器在與伺服器建...