天天看點

HTTP 及 http 請求解析過程

本文為部落客原創,未經允許不得轉載:

    HTTP 全稱為:超文本傳輸協定(HyperText Transfer Protocol,HTTP),一種無狀态的,以請求/應答方式運作的協定,

  它使用可擴充的語義和自描述消息格式,與 基于網絡的超文本資訊系統靈活的互動 。

  目錄

    1.HTTP封包格式

    2.請求行封包格式

    3.響應行封包格式

    4.HTTP 頭字段

    5.常用頭字段

    6.http請求解析完整過程

    1.HTTP封包格式

      HTTP 協定的請求封包和響應封包的結構基本相同,由三大部分組成:      

      •  起始行(start line):描述請求或響應的基本資訊
      •  頭部字段集合(header):使用 key-value 形式更詳細地說明封包
      •  消息正文(entity):實際傳輸的資料,它不一定是純文字,可以是圖檔、視訊 等二進制資料
HTTP 及 http 請求解析過程

    2.請求行封包格式

      
HTTP 及 http 請求解析過程

        • 請求方法:如 GET/HEAD/PUT/POST,表示對資源的操作;
        • 請求目标:通常是一個 URI,标記了請求方法要操作的資源;
        • 版本号:表示封包使用的 HTTP 協定版本。

HTTP 及 http 請求解析過程
      • 版本号:表示封包使用的 HTTP 協定版本;
      • 狀态碼:一個三位數,用代碼的形式表示處理的結果,比如 200 是成功,500 是伺服器錯誤;原因:作為數字狀态碼補充,是更詳細的解釋文字,幫助人了解原因
      • 原因:作為數字狀态碼補充,是更詳細的解釋文字,幫助人了解原因

      頭部字段是 key-value 的形式,key 和 value 之間用“:”分隔,最後用 CRLF 換行表示字 段結束。比如前後分離時經常遇到的要與後端協商

    傳輸資料的類型“Content-type: application/json”,這裡 key 就是“Content-type”,value 就 是“application/json”。HTTP 頭字段非常靈活,

    不僅可以使用标準裡的 Host、 Connection 等已有頭,也可以任意添加自定義頭,這就給 HTTP 協定帶來了無限的擴充可 能。

    頭字段注意事項

      • 字段名不區分大小寫,字段名裡不允許出現空格,可以使用連字元“-”,但不 能使用下劃線“”(有的伺服器不會解析帶“”的頭字段)。字段名後面必須緊接 着“:”,不能有空格,而“:”後的字段值前可以有多個空格;
      • 字段的順序是沒有意義的,可以任意排列不影響語義;
      • 字段原則上不能重複,除非這個字段本身的語義允許,例如 Set-Cookie。

  

    HTTP 協定中有非常多的頭字段,但基本上可以分為以下幾類:

      • 請求字段:請求頭中的頭字段;如Host,Referer。
      • 響應字段:響應頭中的頭字段,如:Server;
      • 通用字段:在請求頭和響應頭裡都可以出現,如 Content-type, Connection ;

              6.http請求解析完整過程

      當使用者在浏覽器輸入網址回車之後,網絡都做了哪些工作呢?

    1.   首先幹活的事浏覽器應用程式,他要解析出url中的域名
    2.   根據域名擷取對應的ip位址,首先從浏覽器緩存中檢視,如下可以檢視浏覽器中域名對應的ip的解析
chrome://net-internals/      
HTTP 及 http 請求解析過程

    如果沒有則從本機域名解析檔案host(/etc/hosts)中檢視,還沒有則從LDNS(LocalDnsServer),RootServer 域名伺服器,國際頂級域名服務商的DNS的層層解析。

  1. 拿到IP位址後,浏覽器就可以發起于伺服器的三次握手
  2. 握手建立之後,就開始組裝http請求封包,發送封包
  3. 伺服器收到請求封包之後開始,請求封包解析,生成響應資料,發送響應資料
  4. 浏覽器收到響應之後,開始渲染頁面

繼續閱讀