【服务器知识】HTTP 请求头信息及其用途详细说明 - 详解

HTTP 请求头信息及其用途详细说明

HTTP 请求头是客户端发送给服务器的元数据,用于传递请求的附加信息、客户端能力、认证信息等。下面按功能分类详细说明各种 HTTP 请求头。

一、基础请求头

1.1 必需请求头

请求头格式示例用途说明
HostHost: api.example.com必需头,指定请求的目标服务器域名和端口
User-AgentUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)标识客户端软件信息,用于统计和兼容性处理
AcceptAccept: 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
请求头认证方案格式
AuthorizationBearer TokenBearer <token>
AuthorizationBasic AuthBasic 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
请求头安全用途注意事项
OriginCORS 请求源检查同源策略关键头
Referer请求来源页面可能泄露敏感信息
X-Requested-With标识 AJAX 请求CSRF 防护参考
X-CSRF-TokenCSRF 令牌自定义防护头

六、请求体相关头

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: ; rel=preload; as=style
Prefer: return=representation, wait=100
Early-Data: 1
请求头优化类型效果
Link资源预加载提前加载关键资源
Prefer服务器行为偏好控制响应处理方式
Early-Data0-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-KeyAPI 密钥认证随机字符串
X-Request-ID请求追踪UUID
X-Forwarded-For真实客户端 IPIP 地址链
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: ; 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身份验证和会话
CORSOrigin, Access-Control-Request-*跨域请求处理
性能优化Save-Data, Link网络和资源优化
自定义X-API-Key, X-Request-ID应用特定功能

正确使用 HTTP 请求头对于构建高效、安全、可维护的 Web 应用至关重要。应根据具体需求选择合适的请求头,并遵循安全最佳实践。

相关文献

【nginx知识】弄懂nginx看这一篇文章就够了
【Nginx知识】nginx日志配置详解
【服务器知识】nginx配置负载均衡完全解读

posted @ 2025-10-13 14:01  yxysuanfa  阅读(27)  评论(0)    收藏  举报