本文為部落客原創,未經允許不得轉載:
HTTP 全稱為:超文本傳輸協定(HyperText Transfer Protocol,HTTP),一種無狀态的,以請求/應答方式運作的協定,
它使用可擴充的語義和自描述消息格式,與 基于網絡的超文本資訊系統靈活的互動 。
目錄
1.HTTP封包格式
2.請求行封包格式
3.響應行封包格式
4.HTTP 頭字段
5.常用頭字段
6.http請求解析完整過程
1.HTTP封包格式
HTTP 協定的請求封包和響應封包的結構基本相同,由三大部分組成:
-
-
- 起始行(start line):描述請求或響應的基本資訊
-
-
-
- 頭部字段集合(header):使用 key-value 形式更詳細地說明封包
-
-
-
- 消息正文(entity):實際傳輸的資料,它不一定是純文字,可以是圖檔、視訊 等二進制資料
-

2.請求行封包格式
HTTP 及 http 請求解析過程
-
-
-
- 請求方法:如 GET/HEAD/PUT/POST,表示對資源的操作;
-
-
-
-
-
- 請求目标:通常是一個 URI,标記了請求方法要操作的資源;
-
-
-
-
-
- 版本号:表示封包使用的 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請求解析完整過程
當使用者在浏覽器輸入網址回車之後,網絡都做了哪些工作呢?
-
- 首先幹活的事浏覽器應用程式,他要解析出url中的域名
- 根據域名擷取對應的ip位址,首先從浏覽器緩存中檢視,如下可以檢視浏覽器中域名對應的ip的解析
chrome://net-internals/
如果沒有則從本機域名解析檔案host(/etc/hosts)中檢視,還沒有則從LDNS(LocalDnsServer),RootServer 域名伺服器,國際頂級域名服務商的DNS的層層解析。
- 拿到IP位址後,浏覽器就可以發起于伺服器的三次握手
- 握手建立之後,就開始組裝http請求封包,發送封包
- 伺服器收到請求封包之後開始,請求封包解析,生成響應資料,發送響應資料
- 浏覽器收到響應之後,開始渲染頁面