HTTP 请求由 请求行(Request Line)、请求头(Request Headers) 和 请求体(Request Body) 三部分组成。以下是详细解析:
一、HTTP 请求组成
-
请求行(Request Line)
- 格式:
[方法] [URI] [协议版本]
示例:GET /api/data HTTP/1.1
- 方法:
GET
,POST
,PUT
,DELETE
,HEAD
,OPTIONS
等。 - URI:资源路径(如
/index.html
或带参数的/search?q=foo
)。 - 协议版本:
HTTP/1.1
或HTTP/2
。
- 格式:
-
请求头(Request Headers)
- 描述客户端环境、请求属性或附加要求。
- 格式:
Header-Name: Value
,每行一个键值对。
-
请求体(Request Body)
- 仅出现在
POST
、PUT
、PATCH
等方法中(GET
通常无请求体)。 - 用于传输表单数据、文件或 JSON 等结构化数据。
- 仅出现在
二、常见请求头类型
通用请求头(General Headers)
请求头 | 作用 |
---|---|
Host | 目标服务器域名(HTTP/1.1 必须字段) |
User-Agent | 客户端标识(浏览器、操作系统、设备信息) |
Connection | 控制连接行为(如 keep-alive 保持长连接) |
Cache-Control | 缓存策略(如 no-cache 或 max-age=3600 ) |
请求控制头(Request Control Headers)
请求头 | 作用 |
---|---|
Accept | 声明客户端支持的响应内容类型(如 text/html, application/json ) |
Accept-Encoding | 支持的压缩算法(如 gzip, deflate ) |
Accept-Language | 语言偏好(如 en-US, zh-CN ) |
Authorization | 认证凭证(如 Bearer <token> 或 Basic <base64> ) |
Cookie | 发送服务器设置的 Cookie |
内容描述头(Content Headers)
请求头 | 作用 |
---|---|
Content-Type | 请求体的数据类型(如 application/json ) |
Content-Length | 请求体字节数(二进制数据必须指定) |
Content-Encoding | 请求体压缩方式(如 gzip ) |
其他功能头
请求头 | 作用 |
---|---|
Referer | 请求来源页面 URL |
Origin | 跨域请求的源站(用于 CORS 校验) |
If-Modified-Since | 条件请求:仅当资源修改后才返回数据 |
三、请求体(Body)类型
请求体的格式由 Content-Type
头决定,常见类型如下:
1. 表单数据
application/x-www-form-urlencoded
默认表单格式,数据编码为键值对:key1=value1&key2=value2
multipart/form-data
用于文件上传,数据分块传输:Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
2. 结构化数据
application/json
传输 JSON 数据:{ "name": "Alice", "age": 30 }
application/xml
传输 XML 数据:<user><name>Alice</name><age>30</age></user>
3. 二进制数据
application/octet-stream
通用二进制流(如文件下载)。image/png
、video/mp4
等
特定类型的二进制文件。
4. 其他类型
text/plain
纯文本数据(非结构化)。application/graphql
GraphQL 查询语句。
四、完整 HTTP 请求示例
POST /api/login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Content-Type: application/json
Content-Length: 45
Authorization: Bearer abc123
{
"username": "alice",
"password": "secret"
}
五、关键注意事项
- GET 请求的查询参数
GET
方法通过 URL 的?key=value
传递参数,而非请求体。 - Content-Type 必须匹配
服务器根据Content-Type
解析请求体,类型错误会导致解析失败。 - 安全头控制
敏感操作需配合Authorization
、CSRF-Token
等安全头。 - 跨域请求限制
跨域请求需服务器支持 CORS,客户端需设置Origin
头。
掌握这些内容可帮助开发者调试 API、优化请求性能并避免常见错误。