js 瀏覽器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緩存相關

未完待續

網頁渲染流程

未完待續
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章