HTTP 请求头信息及其用途详细说明
- HTTP 请求头信息及其用途详细说明
- 一、基础请求头
- 二、内容协商头
- 2.1 内容类型协商
- 2.2 质量值 (q-value) 语法
- 三、缓存控制头
- 四、连接控制头
- 五、认证和安全头
- 六、请求体相关头
- 七、CORS 和跨域头
- 八、性能优化头
- 九、自定义和应用头
- 十、完整请求示例
- 10.1 REST API 请求示例
- 10.2 文件上传请求示例
- 十一、请求头最佳实践
- 11.1 安全性最佳实践
- 11.2 性能最佳实践
- 11.3 兼容性考虑
- 十二、工具和调试
- 12.1 cURL 示例
- 12.2 JavaScript Fetch API
- 十三、总结表格
- 相关文献
HTTP 请求头信息及其用途详细说明
HTTP 请求头是客户端发送给服务器的元数据,用于传递请求的附加信息、客户端能力、认证信息等。下面按功能分类详细说明各种 HTTP 请求头。
一、基础请求头
1.1 必需请求头
请求头 | 格式示例 | 用途说明 |
---|
Host | Host: api.example.com | 必需头,指定请求的目标服务器域名和端口 |
User-Agent | User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) | 标识客户端软件信息,用于统计和兼容性处理 |
Accept | Accept: text/html,application/xhtml+xml | 声明客户端能够处理的内容类型 |
二、内容协商头
2.1 内容类型协商
GET /api/data HTTP/1.1
Accept: application/json, text/javascript, */*
Accept-Language: zh-CN, zh; q=0.9, en; q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Charset: utf-8, iso-8859-1; q=0.5
请求头 | 说明 | 示例值 |
---|
Accept | 客户端接受的响应内容类型 | application/json, text/plain; q=0.8 |
Accept-Language | 客户端接受的自然语言 | zh-CN, en-US; q=0.7 |
Accept-Encoding | 客户端接受的压缩编码 | gzip, deflate, br |
Accept-Charset | 客户端接受的字符集 | utf-8, iso-8859-1 |
2.2 质量值 (q-value) 语法
Accept: text/html, application/xml; q=0.9, */*; q=0.8
- 质量值范围:0.0-1.0,默认 1.0
- 数值越高优先级越高
三、缓存控制头
3.1 缓存验证头
GET /resource HTTP/1.1
If-None-Match: "686897696a7c876b7e"
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
Cache-Control: no-cache
请求头 | 说明 | 使用场景 |
---|
If-Modified-Since | 如果资源在此时间后修改过才返回 | 条件请求,节省带宽 |
If-None-Match | 如果 ETag 不匹配才返回内容 | 更精确的条件请求 |
If-Match | 仅当 ETag 匹配时才执行操作 | 乐观并发控制 |
If-Unmodified-Since | 仅当资源未修改时才执行操作 | 文件上传断点续传 |
3.2 缓存行为控制
Cache-Control: no-cache, no-store, max-age=0
Pragma: no-cache
指令 | 说明 |
---|
no-cache | 强制向服务器验证缓存 |
no-store | 不存储任何缓存 |
max-age=0 | 缓存立即过期 |
max-stale=300 | 接受过期不超过300秒的缓存 |
四、连接控制头
4.1 连接管理
Connection: keep-alive, Upgrade
Keep-Alive: timeout=5, max=100
Upgrade: h2c, websocket
TE: trailers, deflate; q=0.5
请求头 | 说明 | 示例 |
---|
Connection | 控制当前连接 | keep-alive , close |
Keep-Alive | 持久连接参数 | timeout=5, max=100 |
Upgrade | 请求协议升级 | websocket , h2c |
TE | 传输编码偏好 | trailers , gzip |
五、认证和安全头
5.1 身份认证头
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Cookie: sessionid=abc123; user_prefs=dark_mode
Proxy-Authorization: Basic dGVzdDp0ZXN0
请求头 | 认证方案 | 格式 |
---|
Authorization | Bearer Token | Bearer <token> |
Authorization | Basic Auth | Basic base64(username:password) |
Cookie | 会话管理 | name=value; name2=value2 |
Proxy-Authorization | 代理认证 | 同 Authorization |
5.2 安全相关头
Origin: https://example.com
Referer: https://example.com/page
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0;)
X-Requested-With: XMLHttpRequest
X-CSRF-Token: abcdef123456
请求头 | 安全用途 | 注意事项 |
---|
Origin | CORS 请求源检查 | 同源策略关键头 |
Referer | 请求来源页面 | 可能泄露敏感信息 |
X-Requested-With | 标识 AJAX 请求 | CSRF 防护参考 |
X-CSRF-Token | CSRF 令牌 | 自定义防护头 |
六、请求体相关头
6.1 内容描述头
POST /api/users HTTP/1.1
Content-Type: application/json; charset=utf-8
Content-Length: 156
Content-Encoding: gzip
Content-Language: zh-CN
Content-Location: /api/v2/users
请求头 | 说明 | 示例 |
---|
Content-Type | 请求体的媒体类型 | application/json |
Content-Length | 请求体字节数 | 1024 |
Content-Encoding | 内容编码方式 | gzip , deflate |
Content-Language | 内容自然语言 | zh-CN , en-US |
6.2 范围请求头
Range: bytes=0-499
If-Range: "abc123"
请求头 | 说明 | 使用场景 |
---|
Range | 请求部分内容 | 大文件下载、视频流 |
If-Range | 条件范围请求 | 断点续传 |
七、CORS 和跨域头
7.1 简单请求头
GET /api/data HTTP/1.1
Origin: https://client.example.com
7.2 预检请求头
OPTIONS /api/data HTTP/1.1
Origin: https://client.example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-Custom-Header, Content-Type
请求头 | CORS 阶段 | 用途 |
---|
Origin | 所有跨域请求 | 声明请求来源 |
Access-Control-Request-Method | 预检请求 | 声明实际请求方法 |
Access-Control-Request-Headers | 预检请求 | 声明自定义头 |
八、性能优化头
8.1 资源提示头
Link: </style.css>; rel=preload; as=style
Prefer: return=representation, wait=100
Early-Data: 1
请求头 | 优化类型 | 效果 |
---|
Link | 资源预加载 | 提前加载关键资源 |
Prefer | 服务器行为偏好 | 控制响应处理方式 |
Early-Data | 0-RTT 数据 | TLS 1.3 0-RTT 优化 |
8.2 网络条件头
Save-Data: on
Device-Memory: 4
Downlink: 1.5
ECT: 4g
请求头 | 客户端能力 | 服务器优化策略 |
---|
Save-Data | 省流量模式 | 返回压缩内容 |
Device-Memory | 设备内存 | 调整资源大小 |
Downlink | 下行带宽 | 调整传输策略 |
九、自定义和应用头
9.1 常见自定义头
X-API-Key: abc123def456
X-Request-ID: 123e4567-e89b-12d3-a456-426614174000
X-Forwarded-For: 203.0.113.195, 70.41.3.18
X-Forwarded-Proto: https
X-Forwarded-Host: api.example.com
自定义头 | 用途 | 示例值 |
---|
X-API-Key | API 密钥认证 | 随机字符串 |
X-Request-ID | 请求追踪 | UUID |
X-Forwarded-For | 真实客户端 IP | IP 地址链 |
X-Forwarded-Proto | 原始协议 | https |
十、完整请求示例
10.1 REST API 请求示例
POST /api/v1/users HTTP/1.1
Host: api.example.com
User-Agent: MyApp/1.0.0 (iOS 14.5; iPhone)
Accept: application/json
Accept-Language: zh-CN, en; q=0.8
Accept-Encoding: gzip, deflate
Content-Type: application/json; charset=utf-8
Content-Length: 89
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Cache-Control: no-cache
X-Request-ID: 550e8400-e29b-41d4-a716-446655440000{"name": "张三","email": "zhangsan@example.com","age": 30
}
10.2 文件上传请求示例
POST /upload HTTP/1.1
Host: files.example.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 10245
Authorization: Bearer token123
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg[binary file data]
十一、请求头最佳实践
11.1 安全性最佳实践
# 好的实践
Authorization: Bearer [JWT Token]
X-Request-ID: [UUID for tracing]
Content-Type: application/json; charset=utf-8# 避免的做法
Cookie: sensitive_session_data # 使用 HttpOnly Cookie 代替
Authorization: Basic plaintext_credentials # 使用 Token 代替
11.2 性能最佳实践
# 启用压缩
Accept-Encoding: gzip, deflate, br# 合理缓存
Cache-Control: no-cache # 动态数据
If-None-Match: "etag_value" # 条件请求# 资源提示
Link: </critical.css>; rel=preload; as=style
11.3 兼容性考虑
# 渐进增强
Accept: application/json, text/plain; q=0.8, */*; q=0.1
Accept-Language: zh-CN, zh; q=0.9, en; q=0.8# 传统浏览器支持
Pragma: no-cache # 兼容 HTTP/1.0
十二、工具和调试
12.1 cURL 示例
curl -X POST \-H "Content-Type: application/json" \-H "Authorization: Bearer token123" \-H "User-Agent: MyApp/1.0.0" \-d '{"key":"value"}' \https://api.example.com/endpoint
curl -v https://api.example.com
12.2 JavaScript Fetch API
const response = await fetch('/api/data', {method: 'POST',headers: {'Content-Type': 'application/json','Authorization': `Bearer ${token}`,'X-Request-ID': generateUUID(),'Accept': 'application/json','Cache-Control': 'no-cache'},body: JSON.stringify(data)
});
十三、总结表格
类别 | 关键请求头 | 主要用途 |
---|
必需头 | Host, User-Agent | 基础请求标识 |
内容协商 | Accept, Accept-Encoding | 客户端能力声明 |
缓存控制 | If-Modified-Since, Cache-Control | 缓存策略控制 |
认证安全 | Authorization, Cookie | 身份验证和会话 |
CORS | Origin, Access-Control-Request-* | 跨域请求处理 |
性能优化 | Save-Data, Link | 网络和资源优化 |
自定义 | X-API-Key, X-Request-ID | 应用特定功能 |
正确使用 HTTP 请求头对于构建高效、安全、可维护的 Web 应用至关重要。应根据具体需求选择合适的请求头,并遵循安全最佳实践。
相关文献
【nginx知识】弄懂nginx看这一篇文章就够了
【Nginx知识】nginx日志配置详解
【服务器知识】nginx配置负载均衡完全解读