瀏覽器http請求流程與網頁渲染流程
瀏覽器http請 求流程
瀏覽器http請求流程簡要
- URL解析與編碼 / DNS解析查找IP地址。
- 網絡請求發起,進行tcp連接,http協議封裝數據。
- http報文傳輸過程。
- 服務器接收到數據並且處理數據。
- 服務器響應請求並返回數據。
- 客戶端接收數據。
- 瀏覽器加載html,css,js並且渲染頁面。## URL解析與DNS解析
URL解析與編碼
當瀏覽器地址欄輸入url,並且按下enter之後,瀏覽器對URL進行解析,檢查URL的協議如果爲HTTP/HTTPS或者無協議,則按照web處理;另外,如果URL的URI部分如果存在特殊字符,如中文,空格等,則使用encodeURI/decodeURI進行編碼處理,轉成utf8編碼形式。
DNS解析查找IP地址
- 先找瀏覽器本身緩存的DNS緩存,如果沒有,則找系統中DNS緩存。
- 如果還是沒有,則去找本地DNS配置,即hosts文件。
- 如果還是沒有,會去該局域網的路由查找DNS緩存。
- 如果還是沒有,則遞歸的查找網絡上的dns域名服務器,在依然沒找到的情況下,知道頂級域名服務器爲止,則返回域名錯誤。
注意:一個DNS可以配置多個IP,也就形成了基於dns的負載均衡。
Http請求數據格式
請求方法 | url | 協議及版本號 | ||
---|---|---|---|---|
請求頭 | ||||
空行 | ||||
請求體 |
TCP三次握手與四次揮手
相關概念
- seq : sequence,序列號。隨機生成的一個整數型數字。
- ack:acknowledge,確認號。收到發送方的seq進行+1。
- syn:synchronize,同步。 表示建立同步序號,即建立連接。當建立TCP連接的時候,SYN這個標誌位設置爲1,握手完成之後就設置爲0。
- fin:finish,完成。表示釋放連接。
三次握手的本質
三次握手的本質是保證建立通信的雙方,都能對對方實現一次通訊測試,即我說的話,我知道對方能聽到。
三次握手流程
- 第一次握手,客戶端發送syn=1, seq=隨機數x, 服務器收到信息,此時,第一次握手完成。其中seq表示客戶端說的話。
- 第二次握手,服務器端發送syn=1,seq=隨機數y,ack=x+1,客服端收到信息,此時,第二次握手完成。其中seq表示服務器端說的話,ack表示服務器端聽到了客戶端說的話,且客戶端可以通過生成的隨機數x,通過服務器返回的x+1,驗證服務器聽到了客戶端講的話。
- 第三次握手,客戶端發送seq=x+1, ack=y+1,表示客戶端聽到了服務器端說的話。
- 至此,通過第一次,第二次握手,客戶端確定了服務器端能聽到自己講話。通過第二次,第三次握手了,服務器端確定了客戶端能聽到自己講話。雙方通信正常,則連接建立完成。
圖片來源:https://www.cnblogs.com/bj-mr-li/p/11106390.html
關於不是2次握手,4次握手的原因
- 如果只有兩次握手,那麼至少有一方無法保證另一方能聽到自己說話。
- 如果是四次握手,那麼多了一次沒必要的握手。
爲什麼不是三次揮手 - 當客戶端發送結束請求時,服務器端可能還在發送上一次的響應數據,此時,還不能結束。所以第三次揮手在服務器端發送數據完畢之後開始,服務器端發送結束請求給客戶端,客戶端進行第四次揮手,同時,開始2MSL等待(當再次受到揮手時,開始下一次的2MSL等待)。
tomcat處理http請求流程
未完待續
http響應數據格式
未完待續
http緩存相關
未完待續
網頁渲染流程
未完待續