[服務端與網路]一條http請求(一次回車後)到底經歷了什麼

蘇水軒發表於2019-02-27

客戶端發出

當我們在瀏覽器位址列輸入一個地址juejin.im/timeline,回車,

  1. 回車後Http的header包裝請求,新增一些需要用到的屬性(Accrpt...)
  2. 進行域名解析,根據域名找到伺服器的IP,發起TCP三次握手(建立傳輸層連線)
  3. 連線建立後發起http請求
  4. 請求經過客戶端應用層(http協議)
  5. 請求經過客戶端傳輸層(tcp/udp協議)
  6. 請求經過客戶端網路層(ip協議)
  7. 請求經過客戶端鏈路層(網路卡、路由器)
  8. dns解析穿過多個jsp(互利網服務提供商,移動,聯通,電信...)
  9. 找到伺服器

DNS解析

  1. 搜尋瀏覽器本身dns快取
  2. 如沒有則繼續搜尋作業系統自身dns快取
  3. 如沒有則繼續讀取系統檔案hosts(System32\drivers\rtc)
  4. 向本地配置的首選dns伺服器(運營商之類的)發起域名解析請求,運營商自檢後沒有,發起請求至頂級域,然後繼續向com域的ip地址發起請求,然後繼續向juejin.im的dns地址(騰訊雲,域名註冊商)發起請求,然後返回結果給運營商,運營商再返回給客戶端的系統,系統返回給瀏覽器,瀏覽器拿到域名的地址。

伺服器端接收

  1. 請求經過伺服器鏈路層
  2. 請求經過伺服器網路層
  3. 請求經過伺服器傳輸層
  4. 請求經過伺服器應用層
  5. 伺服器處理:伺服器解析http請求,在路由攔截中跳轉至對應的Controller層,C層中呼叫對應的資料Model中,進行資料庫操作,將操作結果返回至C層,然後返回對應的頁面或者資料resData。

伺服器響應

與請求相反,倒過來看上面的傳輸路徑就可以。

客戶端請求資源

客戶端拿到返回的html程式碼的話就會解析病請求其中的靜態資源,1.1後的http請求使用keep-alive可以在一次連線後請求多個資源。

伺服器釋放TCP連線(四次揮手)

在頭部資訊無:Connection:keep-alive時一次請求結束後,伺服器即釋放連線。

客戶端渲染呈現

瀏覽器根據內部機制,將請求的資源和html程式碼進行渲染呈現。



擴充

OSI參考模型,開放式系統互連

定義了網路互連的七層框架,物理層資料鏈路層網路層傳輸層會話層表示層應用層),即OSI開放系統互連參考模型。詳見百度百科OSI參考模型

簡書:一次HTTP請求的歷程(講的更清晰,七個步驟)


本文章多數學習自完整的HTTP請求會經歷以下過程


相關文章