14. Header Field Definitions (头字段定义)
本章定义了 HTTP/1.1 标准中所有标准 HTTP 头字段的语法和语义。发送者不应该 (SHOULD NOT) 生成本章或第 7.1 节(实体头字段)中未定义的头字段,除非接收者将其视为实体主体的一部分。
头字段分类
HTTP 头字段可以按功能分为以下几类:
通用头字段 (General Header Fields)
适用于请求和响应消息,但不适用于传输的实体。
请求头字段 (Request Header Fields)
允许客户端向服务器传递关于请求和客户端本身的附加信息。
响应头字段 (Response Header Fields)
允许服务器传递关于响应的附加信息,这些信息无法放在状态行中。
实体头字段 (Entity Header Fields)
定义关于实体主体或请求标识的资源的元信息。
HTTP/1.1 头字段完整列表
内容协商头字段
| 头字段 | 用途 | 示例 |
|---|---|---|
| 14.1 Accept | 指定客户端可接受的媒体类型 | Accept: text/html, application/json |
| 14.2 Accept-Charset | 指定客户端可接受的字符集 | Accept-Charset: utf-8, iso-8859-1 |
| 14.3 Accept-Encoding | 指定客户端可接受的内容编码 | Accept-Encoding: gzip, deflate |
| 14.4 Accept-Language | 指定客户端首选的语言 | Accept-Language: zh-CN, en |
| 14.5 Accept-Ranges | 指示服务器是否接受范围请求 | Accept-Ranges: bytes |
身份验证头字段
| 头字段 | 用途 | 类型 |
|---|---|---|
| 14.8 Authorization | 包含用户代理的认证凭据 | 请求头 |
| 14.33 Proxy-Authenticate | 代理服务器的认证质询 | 响应头 |
| 14.34 Proxy-Authorization | 客户端向代理提供的认证凭据 | 请求头 |
| 14.47 WWW-Authenticate | 服务器的认证质询 | 响应头 |
缓存控制头字段
| 头字段 | 用途 | 说明 |
|---|---|---|
| 14.6 Age | 响应在代理缓存中停留的时间 | 响应头 |
| 14.9 Cache-Control | 指定缓存指令 | 通用头 |
| 14.21 Expires | 指定响应过期的日期/时间 | 实体头 |
| 14.32 Pragma | 实现特定的指令(向后兼容) | 通用头 |
| 14.44 Vary | 指示哪些请求头影响缓存选择 | 响应头 |
条件请求头字段
| 头字段 | 用途 | 验证方式 |
|---|---|---|
| 14.24 If-Match | 仅当ETag匹配时执行 | 强验证 |
| 14.25 If-Modified-Since | 仅当资源被修改后执行 | 时间验证 |
| 14.26 If-None-Match | 仅当ETag不匹配时执行 | 强/弱验证 |
| 14.27 If-Range | 条件范围请求 | 组合验证 |
| 14.28 If-Unmodified-Since | 仅当资源未被修改时执行 | 时间验证 |
内容描述头字段
| 头字段 | 用途 | 说明 |
|---|---|---|
| 14.11 Content-Encoding | 应用于实体主体的编码 | gzip, compress, deflate |
| 14.12 Content-Language | 实体主体的自然语言 | zh-CN, en-US |
| 14.13 Content-Length | 实体主体的字节长度 | 数字 |
| 14.14 Content-Location | 实体的替代位置 | URI |
| 14.15 Content-MD5 | 实体主体的MD5摘要 | Base64编码 |
| 14.16 Content-Range | 部分实体主体的位置 | bytes 200-1000/1234 |
| 14.17 Content-Type | 实体主体的媒体类型 | text/html; charset=utf-8 |
连接管理头字段
| 头字段 | 用途 | 说明 |
|---|---|---|
| 14.10 Connection | 控制当前连接的选项 | keep-alive, close |
| 14.23 Host | 请求的主机和端口号 | 必需的请求头 |
| 14.39 TE | 客户端可接受的传输编码 | trailers, deflate |
| 14.40 Trailer | 指示消息尾部存在的头字段 | 分块编码 |
| 14.41 Transfer-Encoding | 应用于消息主体的传输编码 | chunked |
| 14.42 Upgrade | 请求切换到其他协议 | HTTP/2.0, WebSocket |
| 14.45 Via | 记录中间代理和网关 | 追踪路径 |
实体验证头字段
| 头字段 | 用途 | 类型 |
|---|---|---|
| 14.19 ETag | 实体标签(唯一标识符) | 强/弱验证器 |
| 14.29 Last-Modified | 资源最后修改时间 | 时间戳 |
请求控制头字段
| 头字段 | 用途 | 说明 |
|---|---|---|
| 14.7 Allow | 资源支持的HTTP方法 | GET, POST, PUT |
| 14.20 Expect | 客户端期望的特定服务器行为 | 100-continue |
| 14.22 From | 请求用户的电子邮件地址 | 信息性 |
| 14.31 Max-Forwards | TRACE/OPTIONS请求的最大转发次数 | 数字 |
| 14.35 Range | 请求实体的部分内容 | bytes=0-499 |
| 14.36 Referer | 请求URI的来源地址 | URI |
响应控制头字段
| 头字段 | 用途 | 说明 |
|---|---|---|
| 14.18 Date | 消息的创建日期和时间 | HTTP日期格式 |
| 14.30 Location | 重定向或新创建资源的URI | 绝对/相对URI |
| 14.37 Retry-After | 建议客户端何时重试 | 日期或秒数 |
| 14.38 Server | 源服务器的软件信息 | 软件名称和版本 |
| 14.46 Warning | 附加的警告信息 | 三位数警告码 |
用户代理信息
| 头字段 | 用途 | 说明 |
|---|---|---|
| 14.43 User-Agent | 发起请求的用户代理信息 | 浏览器标识 |
头字段语法规则
所有 HTTP/1.1 头字段值的语法规则在第 2.2 节(基本规则)和本节中描述。
通用语法规则
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
多值头字段
某些头字段可以包含多个值,可以通过以下两种方式表示:
-
单个头字段,值用逗号分隔:
Accept: text/html, application/json, */* -
多个同名头字段:
Accept: text/html
Accept: application/json
Accept: */*
日期/时间格式
HTTP 应用程序必须接受以下三种日期/时间格式:
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C asctime() format
重要注意事项
头字段扩展性
HTTP/1.1 允许扩展头字段,但接收者应该能够处理未知的头字段:
- 代理 - 必须转发无法识别的头字段
- 用户代理 - 应该忽略无法识别的头字段
头字段顺序
除非头字段定义另有说明,否则头字段的顺序不重要。但是,建议先发送通用头字段,然后是请求头或响应头字段,最后是实体头字段。
头字段大小限制
虽然 HTTP 不对头字段的长度设置预定义的限制,但实现应该准备接受任何合理长度的头字段。
相关参考
- 完整的头字段定义请参考 RFC 2616 第 14 章原文
- 更新的头字段规范请参考 RFC 7230-7235 (HTTP/1.1 新版本)
- IANA HTTP 头字段注册表:https://www.iana.org/assignments/message-headers
注意:本章提供了所有标准 HTTP/1.1 头字段的概览。每个头字段都有详细的语法规则、使用场景和示例。在实际应用中,理解这些头字段的正确用法对于构建符合标准的 HTTP 应用程序至关重要。