HTTP 头
HTTP 头(HTTP Header)是 HTTP 请求/响应中用于传递元数据的关键部分,分为 请求头(Request Header)、响应头(Response Header)、通用头(General Header) 和 实体头(Entity Header) 四大类(注:HTTP/2 后对分类做了简化,但核心字段功能不变)。它们就像“数据的说明书”,告诉客户端/服务器如何处理本次请求或响应。
一、通用头(General Headers)
适用于 请求和响应,传递通用的元数据,与具体业务逻辑无关。
字段名 | 作用说明 | 示例 |
| 控制缓存策略(客户端/服务器如何缓存数据) |
|
| 控制连接状态(是否保持长连接) |
|
| 表示请求/响应发送的时间(GMT 格式) |
|
| 表示数据的传输编码方式(如分块传输) |
|
| 提议将当前协议升级为其他协议(如 HTTP/1.1 升级到 WebSocket) |
|
| 记录请求经过的代理/网关(追踪请求路径) |
|
二、请求头(Request Headers)
由 客户端(浏览器/APP) 发送给服务器,包含请求的细节(如身份、期望的响应格式、请求来源等)。
字段名 | 作用说明 | 示例 |
| 指定请求的目标服务器域名和端口(HTTP/1.1 必需字段,用于虚拟主机识别) |
|
| 标识客户端的类型(浏览器/系统/APP 版本),服务器据此返回适配内容 |
|
| 客户端能接受的响应数据格式(MIME 类型),服务器据此返回对应格式 |
|
| 客户端支持的压缩算法(如 gzip、br),服务器用对应算法压缩响应以节省带宽 |
|
| 客户端期望的响应语言(如中文、英文),服务器据此返回多语言内容 |
|
| 携带身份认证信息(如 Token、Basic 认证),用于权限校验 |
|
| 客户端存储的 Cookie 数据(服务器之前通过 |
|
| 标识当前请求的来源页面(即“从哪个页面跳过来的”),用于防盗链、统计 |
|
| 标识请求的来源域名(仅跨域请求时携带,不含路径),用于 CORS 跨域校验 |
|
| 客户端发送的请求体数据格式(仅 POST/PUT 等带请求体的方法需要) |
|
| 客户端发送的请求体数据长度(字节数),服务器据此判断数据是否接收完整 |
|
| 记录请求经过的客户端真实 IP(多层代理场景下,第一个值为真实 IP) |
|
| 标识请求是否为 AJAX 请求(前端框架如 jQuery/Vue 会自动添加) |
|
三、响应头(Response Headers)
由 服务器 发送给客户端,包含响应的处理规则(如Cookie设置、跨域允许、响应格式等)。
字段名 | 作用说明 | 示例 |
| 响应状态码(核心字段,标识请求是否成功) |
|
| 标识服务器的软件类型(如 Apache、Nginx),可自定义隐藏以提高安全性 |
|
| 服务器向客户端下发 Cookie(可设置过期时间、域名、路径、HttpOnly 等属性) |
|
| 跨域请求时,允许访问的客户端域名(解决跨域问题) |
|
| 跨域请求时,允许的 HTTP 方法(如 GET/POST/PUT) |
|
| 跨域请求时,是否允许携带 Cookie(需与前端 |
|
| 服务器返回的响应体数据格式(MIME 类型),客户端据此解析(如渲染页面、解析JSON) |
|
| 服务器对响应体的压缩算法(与客户端 |
|
| 服务器返回的响应体数据长度(字节数),客户端据此判断数据是否接收完整 |
|
| 重定向地址(仅配合 3xx 状态码使用,如 301 永久重定向、302 临时重定向) |
|
| 页面自动刷新/跳转(秒数后执行) |
|
| 资源的唯一标识(用于缓存校验,如“资源是否被修改”) |
|
| 资源最后修改的时间(用于缓存校验,与客户端 |
|
四、实体头(Entity Headers)
用于描述 请求体/响应体(实体数据) 的元数据(如数据类型、长度、编码、语言等),部分字段已与请求头/响应头重叠(如 Content-Type
、Content-Length
),HTTP/2 后更强调“与实体相关的头”而非单独分类。
常见实体头(已在上述分类中覆盖):
Content-Type
:实体数据格式Content-Length
:实体数据长度Content-Encoding
:实体数据压缩算法Content-Language
:实体数据的语言(如Content-Language: zh-CN
)Expires
:实体数据的过期时间(缓存用,优先级低于Cache-Control
)
五、关键补充:自定义头(X-* 头)
除了标准头,开发者还可以自定义头,通常以 X-
开头(如 X-User-ID
、X-Request-Trace-ID
),用于传递业务自定义的元数据(如用户ID、请求追踪ID)。
示例:
- 客户端请求头:
X-User-ID: 1001
(传递当前用户ID) - 服务器响应头:
X-Trace-ID: abc-123-def
(传递请求追踪ID,用于排查问题)
总结
HTTP 头的核心作用是 “传递上下文”:
- 客户端通过请求头告诉服务器“我是谁、我要什么、我能处理什么”;
- 服务器通过响应头告诉客户端“请求结果如何、我返回了什么、你该怎么处理”。
日常开发中,常见问题(如跨域、缓存、参数解析错误)大多与 HTTP 头配置相关(例如跨域问题需检查 Access-Control-*
头,POST 参数拼URL需检查 Content-Type
头)。