http請求發送后從客戶端到服務端的詳細過程


  1. 首先http請求是基於tcp/ip協議的,所以要通過DNS服務器將域名解析為相應ip地址如果url里不包含端口號,則會使用該協議的默認端口號。DNS解析詳細過程參考https://blog.csdn.net/qq_39393899/article/details/80405979

  2. 建立一個socket連接,socket相當於tcp/ip協議的接口,便於我們去使用這個協議(比如create,listen,accept,connect,read和write等等)。socket還有心跳機制,用於保持客戶端服務端的連接,按照一定的時間間隔發送一個自己命名的包給對方。由於socket連接基於tcp/ip協議,所以要經過三次握手。

  3. HTTP請求格式分別是請求行、請求頭、空行、消息體,每部分內容占一行。

    請求行 :由三部分組成:分別是請求方法( GET/POST/DELETE/PUT/HEAD )、 URI 路徑、 HTTP 版本號。
    請求頭:緩存相關信息(Cache-Control,If-Modified-Since)、客戶端身份信息(User-Agent)等鍵值對信息。

    空行。

    主體:客戶端發給服務端的請求數據,這部分數據並不是每個請求必須的。

  4. 服務器響應HTTP請求

    服務器接收處理完請求后返回一個HTTP響應消息給客戶端。HTTP響應消息的格式包括:狀態行、響應頭、空行、消息體。每部分內容占一行。
    狀態行 :有 HTTP 協議版本號, 狀態碼 和狀態說明三部分構成。
    響應頭:用於說明數據的一些信息,比如數據類型、內容長度等鍵值對。

    空行。

    消息體:服務端返回給客戶端的HTML文本內容。或者其他格式的數據,比如:視頻流、圖片或者音頻數據。

  5. 瀏覽器解析html代碼,並請求html代碼中的資源

    瀏覽器拿到html文件后,就開始解析其中的html代碼,遇到js/css/image等靜態資源時,向服務器端發起一個HTTP請求,如果服務器端返回304狀態碼(告訴瀏覽器服務器端沒有修改該資源),那么瀏覽器會直接讀取本地的該資源的緩存文件。否則開啟新線程向服務器端去請求下載。(這個時候就用上keep-alive特性了,建立一次HTTP連接,可以請求多個資源。)

    最后,瀏覽器利用自己內部的工作機制,把請求到的靜態資源和html代碼進行渲染,再呈現給用戶。


免責聲明!

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



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