RFC 7231 - 超文本传输协议 (HTTP/1.1): 语义和内容
状态: 互联网标准
废弃: RFC 2616
更新: RFC 2817
作者: R. Fielding (Adobe), J. Reschke (greenbytes)
发布日期: 2014年6月
摘要
超文本传输协议 (HTTP) 是一个无状态的应用层协议,用于分布式、协作式的超文本信息系统。
本文档定义了HTTP/1.1消息的语义,包括:
- 📨 请求方法 (Request Methods)
- 📋 请求头部字段 (Request Header Fields)
- 📊 响应状态码 (Response Status Codes)
- 📄 响应头部字段 (Response Header Fields)
- 📦 消息负载 (Payload - 元数据和正文内容)
- 🔄 内容协商机制 (Content Negotiation)
重要性
RFC 7231是HTTP/1.1规范系列的核心文档:
- 🌐 定义Web通信的语义
- 🎯 所有HTTP方法的标准定义
- 📊 完整的状态码体系
- 🔄 内容协商机制
- 📦 表示和负载处理
与RFC 2616的关系
RFC 7231是RFC 2616 (HTTP/1.1) 的现代替代版本,将其拆分为多个专注的文档:
| RFC | 主题 | 说明 |
|---|---|---|
| RFC 7230 | 消息语法和路由 | 消息格式、连接管理 |
| RFC 7231 | 语义和内容 | 方法、状态码、内容协商 |
| RFC 7232 | 条件请求 | If-Match, ETag等 |
| RFC 7233 | 范围请求 | 部分内容、断点续传 |
| RFC 7234 | 缓存 | 缓存控制机制 |
| RFC 7235 | 认证 | 身份验证框架 |
目录
1. Introduction (简介)
- 1.1 一致性和错误处理
- 1.2 语法表示法
2. Resources (资源)
3. Representations (表示)
- 3.1 表示元数据
- 3.1.1 处理表示数据
- 3.1.2 编码(压缩或完整性)
- 3.1.3 受众语言
- 3.1.4 标识
- 3.2 表示数据
- 3.3 负载语义
- 3.4 内容协商
- 3.4.1 主动协商
- 3.4.2 响应式协商
4. Request Methods (请求方法)
- 4.1 概述
- 4.2 通用方法属性
- 4.2.1 安全方法
- 4.2.2 幂等方法
- 4.2.3 可缓存方法
- 4.3 方法定义
- 4.3.1 GET
- 4.3.2 HEAD
- 4.3.3 POST
- 4.3.4 PUT
- 4.3.5 DELETE
- 4.3.6 CONNECT
- 4.3.7 OPTIONS
- 4.3.8 TRACE
5. Request Header Fields (请求头部字段)
- 5.1 控制
- 5.2 条件
- 5.3 内容协商
- 5.4 认证凭证
- 5.5 请求上下文
6. Response Status Codes (响应状态码)
- 6.1 状态码概述
- 6.2 1xx 信息性响应
- 6.3 2xx 成功
- 6.4 3xx 重定向
- 6.5 4xx 客户端错误
- 6.6 5xx 服务器错误
7. Response Header Fields (响应头部字段)
- 7.1 控制数据
- 7.2 验证器字段
- 7.3 认证挑战
- 7.4 响应上下文
8. IANA Considerations (IANA考虑)
9. Security Considerations (安全考虑)
Appendix A-D (附录)
Glossary (术语表)
References (参考文献)
快速参考
HTTP请求方法
| 方法 | 安全 | 幂等 | 可缓存 | 用途 |
|---|---|---|---|---|
| GET | ✅ | ✅ | ✅ | 获取资源 |
| HEAD | ✅ | ✅ | ✅ | 获取头部 |
| POST | ❌ | ❌ | 条件 | 提交数据 |
| PUT | ❌ | ✅ | ❌ | 更新资源 |
| DELETE | ❌ | ✅ | ❌ | 删除资源 |
| CONNECT | ❌ | ❌ | ❌ | 建立隧道 |
| OPTIONS | ✅ | ✅ | ❌ | 查询选项 |
| TRACE | ✅ | ✅ | ❌ | 回显请求 |
HTTP状态码
1xx 信息性
- 100 Continue - 继续
- 101 Switching Protocols - 切换协议
2xx 成功
- 200 OK - 成功
- 201 Created - 已创建
- 202 Accepted - 已接受
- 204 No Content - 无内容
- 206 Partial Content - 部分内容
3xx 重定向
- 301 Moved Permanently - 永久移动
- 302 Found - 找到
- 304 Not Modified - 未修改
- 307 Temporary Redirect - 临时重定向
- 308 Permanent Redirect - 永久重定向
4xx 客户端错误
- 400 Bad Request - 错误请求
- 401 Unauthorized - 未授权
- 403 Forbidden - 禁止
- 404 Not Found - 未找到
- 405 Method Not Allowed - 方法不允许
- 408 Request Timeout - 请求超时
- 409 Conflict - 冲突
- 410 Gone - 已删除
- 415 Unsupported Media Type - 不支持的媒体类型
5xx 服务器错误
- 500 Internal Server Error - 内部服务器错误
- 501 Not Implemented - 未实现
- 502 Bad Gateway - 错误网关
- 503 Service Unavailable - 服务不可用
- 504 Gateway Timeout - 网关超时
- 505 HTTP Version Not Supported - HTTP版本不支持
重要头部字段
请求头部
- Accept: 可接受的媒体类型
- Accept-Charset: 可接受的字符集
- Accept-Encoding: 可接受的编码
- Accept-Language: 可接受的语言
- Host: 目标主机
- User-Agent: 用户代理
- Referer: 引荐页
- If-Modified-Since: 条件请求
响应头部
- Content-Type: 内容类型
- Content-Length: 内容长度
- Content-Encoding: 内容编码
- Content-Language: 内容语言
- Location: 重定向位置
- Server: 服务器信息
- Allow: 允许的方法
内容协商
客户端请求:
Accept: text/html, application/json;q=0.9
Accept-Language: zh-CN, en;q=0.8
Accept-Encoding: gzip, deflate
服务器响应:
Content-Type: text/html; charset=utf-8
Content-Language: zh-CN
Content-Encoding: gzip
核心概念
方法属性
安全方法 (Safe Methods):
- 只读操作,不改变服务器状态
- GET, HEAD, OPTIONS, TRACE
幂等方法 (Idempotent Methods):
- 多次执行效果相同
- GET, HEAD, PUT, DELETE, OPTIONS, TRACE
可缓存方法 (Cacheable Methods):
- 响应可以被缓存
- GET, HEAD, POST (条件)
内容协商类型
主动协商 (Proactive):
- 客户端通过头部字段指定偏好
- 服务器选择最佳表示
响应式协商 (Reactive):
- 服务器提供多个选择
- 客户端选择合适的表示
实现要点
必须实现 (MUST)
- ✅ 支持GET和HEAD方法
- ✅ 理解所有状态码类别
- ✅ 正确处理Host头部
- ✅ 支持安全和幂等语义
应该实现 (SHOULD)
- ✅ 支持OPTIONS方法
- ✅ 实现内容协商
- ✅ 提供有意义的错误响应
- ✅ 支持条件请求
可选实现 (MAY)
- TRACE方法
- 特定的内容编码
- 扩展方法
相关RFC
- RFC 7230: HTTP/1.1消息语法和路由
- RFC 7232: HTTP/1.1条件请求
- RFC 7233: HTTP/1.1范围请求
- RFC 7234: HTTP/1.1缓存
- RFC 7235: HTTP/1.1认证
- RFC 3986: URI通用语法
- RFC 2119: 关键词定义
在线资源
下一章: 1. Introduction (简介)
前置知识: RFC 3986 - URI通用语法