摘要
本文主要讲述了:
- 什么是 HTTP 消息
- 分类
- 请求消息
正文
什么是 HTTP 消息
HTTP 消息是客户端和服务器端交换数据的方式
分类
HTTP 消息可以分为 2 类:
- 由客户端向服务器端发出的请求消息
- 由服务器端向客户端发回的响应消息
请求消息
请求消息可以分为 3 部分:
请求体
不是所有请求都有请求体,例如:GET
、HEAD
、DELETE
、OPTIONS
就没有请求体。
请求体可以分为 2 类:
单资源请求体
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <form method="POST"> <input type="text" name="username" value="jsweibo" /> <button>Submit</button> </form> </body> </html>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| POST /index.html HTTP/1.1 Host: 127.0.0.1:3000 Connection: keep-alive Content-Length: 16 Cache-Control: max-age=0 DNT: 1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 Sec-Fetch-Dest: document Origin: http://127.0.0.1:3000 Content-Type: application/x-www-form-urlencoded Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Referer: http://127.0.0.1:3000/index.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9
username=jsweibo
|
多资源请求体
多资源请求体由多个部分请求体组成
每个部分请求体都从边界开始,每个部分请求体都拥有各自的头部区域,空行以及主体区域,最后一个部分请求体的后面有一个封闭边界
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <form method="POST" enctype="multipart/form-data"> <input type="text" name="username" value="jsweibo" /> <input type="file" name="avatar" /> <button>Submit</button> </form> </body> </html>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| POST /index.html HTTP/1.1 Host: 127.0.0.1:3000 Proxy-Connection: keep-alive Content-Length: 404 Cache-Control: max-age=0 Origin: http://127.0.0.1:3000 Upgrade-Insecure-Requests: 1 DNT: 1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryLNIyFWTdmRKe5NfA User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 Sec-Fetch-Dest: document Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Referer: http://127.0.0.1:3000/index.html Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9
------WebKitFormBoundaryLNIyFWTdmRKe5NfA Content-Disposition: form-data; name="username"
jsweibo ------WebKitFormBoundaryLNIyFWTdmRKe5NfA Content-Disposition: form-data; name="avatar"; filename="c8fb3b2a99b3678c38b537af439b6ed5a13b0d73.png" Content-Type: image/png
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAA1JREFUCB1j+M/A8B8ABQAB/8gPYhYAAAAASUVORK5CYII= ------WebKitFormBoundaryLNIyFWTdmRKe5NfA--
|
注:出于可读性考虑,本示例中的iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAA1JREFUCB1j+M/A8B8ABQAB/8gPYhYAAAAASUVORK5CYII=
其实是进行 Base64 编码之后的结果。原数据为十六进制数据。
响应消息
响应消息可以分为 3 部分:
响应体
不是所有响应都有响应体,例如:201
、204
通常就没有请求体。
响应体可以分为 3 类:
- 单资源响应体,由已知长度的单文件组成,存在
Content-Type
和Content-Length
- 单资源响应体,由未知长度的单文件组成,使用分块编码传输,
Transfer-Encoding=chunked
- 多资源响应体
多资源响应体
多资源响应体由多个部分响应体组成
每个部分响应体都从边界开始,每个部分响应体都拥有各自的头部区域,空行以及主体区域,最后一个部分响应体的后面有一个封闭边界
参考资料
本文对你有帮助?请支持我