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

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

  • [HTTP 请求头信息及其用途详细说明](#HTTP 请求头信息及其用途详细说明)

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 内容类型协商

http 复制代码
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) 语法

http 复制代码
Accept: text/html, application/xml; q=0.9, */*; q=0.8
  • 质量值范围:0.0-1.0,默认 1.0
  • 数值越高优先级越高

三、缓存控制头

3.1 缓存验证头

http 复制代码
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 缓存行为控制

http 复制代码
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 连接管理

http 复制代码
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 身份认证头

http 复制代码
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 安全相关头

http 复制代码
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 内容描述头

http 复制代码
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 范围请求头

http 复制代码
Range: bytes=0-499
If-Range: "abc123"
请求头 说明 使用场景
Range 请求部分内容 大文件下载、视频流
If-Range 条件范围请求 断点续传

七、CORS 和跨域头

7.1 简单请求头

http 复制代码
GET /api/data HTTP/1.1
Origin: https://client.example.com

7.2 预检请求头

http 复制代码
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 资源提示头

http 复制代码
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 网络条件头

http 复制代码
Save-Data: on
Device-Memory: 4
Downlink: 1.5
ECT: 4g
请求头 客户端能力 服务器优化策略
Save-Data 省流量模式 返回压缩内容
Device-Memory 设备内存 调整资源大小
Downlink 下行带宽 调整传输策略

九、自定义和应用头

9.1 常见自定义头

http 复制代码
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 请求示例

http 复制代码
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 文件上传请求示例

http 复制代码
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 安全性最佳实践

http 复制代码
# 好的实践
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 性能最佳实践

http 复制代码
# 启用压缩
Accept-Encoding: gzip, deflate, br

# 合理缓存
Cache-Control: no-cache  # 动态数据
If-None-Match: "etag_value"  # 条件请求

# 资源提示
Link: </critical.css>; rel=preload; as=style

11.3 兼容性考虑

http 复制代码
# 渐进增强
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 示例

bash 复制代码
# 包含完整请求头
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

javascript 复制代码
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配置负载均衡完全解读

相关推荐
Avan_菜菜14 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
zzzzzz3103 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
ping某5 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
霜落长河6 天前
抛弃TCP改用UDP,HTTP3怎么了?
http
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质7 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务