在瀏覽器輸入一個網址回車後發生了什麼?

1.DNS解析

  • 在瀏覽器DNS緩存中搜索
  • 在操做系統DNS緩存中搜索
  • 讀取系統hosts文件,查找其中是否有對應的ip
  • 將解析出的IP地址返回給瀏覽器

2.創建TCP鏈接(三次握手)

  • 第一次握手:客戶端發送一個 SYN 包給服務器端,而後等待服務器端的回覆。
  • 第二次握手:服務器端收到客戶端發送的 SYN 包後發出 ACK 回覆並同時返回一個 SYN 包,進入準備鏈接狀態。
  • 第三次握手:客戶端收到服務器端返回的 SYN+ACK 包後,確認了服務器端已經收到請求並作好鏈接準備,因而給服務器端發送 ACK包。鏈接成功,三次握手完畢。
    三次握手

3.客戶端發送http請求

  • HTTP請求包括請求報頭和請求主體兩個部分,其中請求報頭包含了相當重要的信息,包括請求的方法(GET / POST)、目標url、遵循的協議(http / https / ftp…),返回的信息是否須要緩存,以及客戶端是否發送cookie等。

4.服務器處理請求並返回HTTP報文

  • 服務接收到客戶端發送的HTTP請求後,查找客戶端請求的資源,並返回響應報文給瀏覽器。響應報文中有狀態碼。狀態碼由三位數字組成,其中常見的是200,OK表示請求成功。301表示永久重定向,在返回301狀態碼的同時,響應報文也會附帶重定向的url,客戶端接收到後將http請求的url作相應的改變再從新發送。404 not found表示客戶端請求的資源找不到。

5.瀏覽器將服務器返回的HTTP報文渲染到頁面上

  • 處理 HTML 標記並構建 DOM 樹。
  • 處理 CSS 標記並構建 CSSOM 樹。
  • 將 DOM樹 與 CSSDOM 樹合併成一個渲染樹。
  • 根據渲染樹來佈局,以計算每一個節點的幾何信息。
  • 將各個節點繪製到屏幕上。

6.斷開鏈接(四次揮手)

  • 當頁面渲染完成後,客戶端或服務器端將隨時提出斷開鏈接請求。此時會發生四次揮手,基本步驟與三次回收相同,但因爲斷開鏈接時數據可能還處於傳輸階段,因此第二次揮手時會先返回 FIN 包再返回 ACK 斷開鏈接確認報文。因此變成了四步。

三次握手
相關文章
相關標籤/搜索