客戶端發出
當我們在瀏覽器位址列輸入一個地址juejin.im/timeline,回車,
- 回車後Http的header包裝請求,新增一些需要用到的屬性(Accrpt...)
- 進行域名解析,根據域名找到伺服器的IP,發起TCP三次握手(建立傳輸層連線)
- 連線建立後發起http請求
- 請求經過客戶端應用層(http協議)
- 請求經過客戶端傳輸層(tcp/udp協議)
- 請求經過客戶端網路層(ip協議)
- 請求經過客戶端鏈路層(網路卡、路由器)
- dns解析穿過多個jsp(互利網服務提供商,移動,聯通,電信...)
- 找到伺服器
DNS解析
- 搜尋瀏覽器本身dns快取
- 如沒有則繼續搜尋作業系統自身dns快取
- 如沒有則繼續讀取系統檔案hosts(System32\drivers\rtc)
- 向本地配置的首選dns伺服器(運營商之類的)發起域名解析請求,運營商自檢後沒有,發起請求至頂級域,然後繼續向com域的ip地址發起請求,然後繼續向juejin.im的dns地址(騰訊雲,域名註冊商)發起請求,然後返回結果給運營商,運營商再返回給客戶端的系統,系統返回給瀏覽器,瀏覽器拿到域名的地址。
伺服器端接收
- 請求經過伺服器鏈路層
- 請求經過伺服器網路層
- 請求經過伺服器傳輸層
- 請求經過伺服器應用層
- 伺服器處理:伺服器解析http請求,在路由攔截中跳轉至對應的Controller層,C層中呼叫對應的資料Model中,進行資料庫操作,將操作結果返回至C層,然後返回對應的頁面或者資料resData。
伺服器響應
與請求相反,倒過來看上面的傳輸路徑就可以。
客戶端請求資源
客戶端拿到返回的html程式碼的話就會解析病請求其中的靜態資源,1.1後的http請求使用keep-alive可以在一次連線後請求多個資源。
伺服器釋放TCP連線(四次揮手)
在頭部資訊無:Connection:keep-alive時一次請求結束後,伺服器即釋放連線。
客戶端渲染呈現
瀏覽器根據內部機制,將請求的資源和html程式碼進行渲染呈現。
擴充
OSI參考模型,開放式系統互連
定義了網路互連的七層框架,物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層),即OSI開放系統互連參考模型。詳見百度百科OSI參考模型
簡書:一次HTTP請求的歷程(講的更清晰,七個步驟)
本文章多數學習自完整的HTTP請求會經歷以下過程