HTTP 協議及其請求過程
TCP/IP 的網絡模型有 7 層,Http 協議是位于最上層的應用層。應用層協議的意思是它是服務于我們能體驗到的一些電腦軟件,QQ/郵箱/瀏覽器這些。應用層下面還有好幾層,他們主要保障的是網絡傳輸中的一些安全性(會話加密),可靠性(字節冗余校驗),字符轉字節,字節轉高低電平實現信號的傳輸等。
1. 調試工具
Http 協議及其請求過程是用于瀏覽器與后臺服務的數據交互的,選擇一個瀏覽器,筆者下面用 chrome 進行演示。
- 打開瀏覽器;
- 快捷鍵按下 F12;
- 地址欄輸入 http://www.xianlaiwan.cn/;
- 觀察底部 network 欄目的網絡請求信息。
2. 協議內容
Http 規定了會話是由客戶端發起,服務端響應。發起和響應的消息格式如下:
2.1 請求的消息格式
- 請求頭部信息
get http://www.xianlaiwan.cn/ HTTP/1.1
host:117.121.101.134:443
關鍵字 | 說明 |
---|---|
get |
請求的方法 |
https://www.baidu.com |
請求的資源定位,URL |
HTTP/1.1 |
告訴后臺服務器具體請求的協議版本號 |
host |
遠端服務器的地址 |
... |
頭部字段還有很多,這邊只是列舉了必要的,詳細的見后面具體章節 |
- 請求體內容
keyword:http
name:mooc
請求體對應的是具體的業務數據,表單提交的字段,查詢接口的參數等。
2.2 解釋
可能部分同學會有疑問,上面的兩段請求內容跟瀏覽器的截圖不一樣,原因是我上面的是 Http 協議標準的定義,瀏覽器畢竟面向的是用戶,對請求的信息有做了解析,更人性化地展示了請求的內容。下面的內容是某個后臺服務接收到瀏覽器請求的具體報文信息,借助 TCPflow
這個工具在 Linux 服務器上面監聽的?;蛘吆唵蔚?curl -v http://www.baidu.com/
也可以看到協議內容。
2.3 響應的消息格式
- 響應頭部信息
HTTP/1.1 200 OK
Date:Sun, 23 Feb 2020 07:31:24 GMT
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 129
Content-Type: application/json; charset=UTF-8
...
返回了請求的狀態,200狀態碼對應的就是成功,還有一些鏈接狀態,內容的編碼,長度,媒體類型等。
- 響應的正文
{result: 0, data: ["Vue", "Python", "Java", "flutter", "springboot", "docker", "React", "小程序"],…}
data: ["Vue", "Python", "Java", "flutter", "springboot", "docker", "React", "小程序"]
msg: "成功"
result: 0
返回了消息的具體信息,這個消息有可能是一串 html 文本,也可能是 json 串,圖片,附件都有可能,一般是跟 content-type 對應。
3. 小結
在上面的請求內容中,規定了第一個是 method
后面是 url
接著是 protocal/version
,這樣的約束就是 http 的協議,服務器收到請求就根據這個規則拆開解析。應用這樣的模式,web 的客戶端和服務端互相知道了請求的方法,地址,字符編碼,參數,響應值等。