自己總結分析。
1.根據域名,進行DNS域名解析,獲得IP地址。
2.根據IP地址,建立TCP連接
3.建立TCP連接後,向IP地址發送http請求
4服務端處理請求
5服務端返回響應結果
6 關閉TCP連接
7瀏覽器解析HTML
8瀏覽器渲染數據展示
Q1:現代瀏覽器在與服務器建立了一個 TCP 連接後是否會在一個 HTTP 請求完成後斷開?什麼情況下會斷開?
這個問題實則實在問HTTP/1.0 與HTTP/1.1的區別。再http/1.0中,服務器再發送玩一個HTTP響應後,會斷開TCP連接,但是
這樣每次請求都會重新建立和斷開TCP連接,代價過大。某些服務器對 Connection: keep-alive 的 Header 進行了支持。就是完成一個http請求後,不斷開tcp連接,這樣之後發送請求的就不需要重新建立連接,以及如果維持連接,ssl的開銷也會避免。HTTP/1.1就把connection頭寫進標準,並默認開啓持久連接,keep-live,除非請求中寫明connection:close。
Q2:一個 TCP 連接可以對應幾個 HTTP 請求?
在第一個問題的基礎上,如果維持連接的狀態下,可以處理多個請求。
Q3:一個 TCP 連接中 HTTP 請求發送可以一起發送麼(比如一起發三個請求,再三個響應一起接收)?
HTTP/1.1存在pipelining技術可以完成這個多個請求同時發送,但是由於瀏覽器默認關閉,所以可以認爲這是不可以的。
在 HTTP2 中由於 Multiplexing 特點的存在,多個 HTTP 請求可以在同一個 TCP 連接中並行進行。