一次完整的HTTP請求流程(當我們在瀏覽器輸入一個URL后,發生了什么)


首先是域名解析

瀏覽器檢查是否有緩存(游覽器緩存-系統緩存-路由器緩存)。如果有,直接顯示。如果沒有,跳到第三步。
在發送http請求前,需要域名解析(DNS解析),解析獲取對應過的ip地址,DNS查詢步驟,其中一步成功則直接跳到建立連接部分:

  • 瀏覽器搜索自身的DNS緩存
  • 搜索操作系統自身的DNS緩存

  • 讀取本地的HOST文件

  • 向域名服務器發送請求   

建立TCP連接(TCP三次握手)

瀏覽器獲得域名對應的IP地址后,建立TCP連接,TCP協議通過“三次握手”等方法保證傳輸的安全可靠:

  • 發送方:SYN(synchronize),客戶端發送SYN包(SYN=j)到服務器

  • 接收方:SYN/ACK:在接收到客戶端的syn包后,服務器也要發送一個SYN包給客戶端,即SYN+ACK包,(確認信息傳達)

  • 發送方:ACK:客戶端收到SYN+ACK包后,向服務器發送ACK包(確認接收方在線可收消息,握手結束)

  • Accept:完成三次握手,客戶端與服務器開始傳送數

發送HTTP請求

客戶端向服務端發起HTTP請求(例如:POST/login.html http/1.1)。

客戶端發送請求頭信息,請求內容,最后會發送一空白行,標示客戶端請求完畢。

服務器發送HTML響應

服務器做出應答,表示對於客戶端請求的應答,例如:HTTP/1.1 200 OK。

服務器向客戶端發送應答頭信息。

服務器向客戶端發送請求頭信息后,也會發送一空白行,標示應答頭信息發送完畢,接着就以Content-type要求的數據格式發送數據給客戶端。

TCP連接的釋放

數據傳輸完畢后,雙方都可釋放連接。最開始的時候,客戶端和服務器都是處於ESTABLISHED狀態,然后客戶端主動關閉,服務器被動關閉。

  • 客戶端:FIN:客戶端進程發出連接釋放報文,並且停止發送數據;

  • 服務器:ACK:服務器收到連接釋放報文,發出確認報文;

  • 服務器:FIN+ACK:將最后的數據發送完畢后,就向客戶端發送連接釋放報文

  • 客戶端:ACK:收到服務器的連接釋放報文后,發出確認報文(服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB后,就結束了這次的TCP連接)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM