RFC 7230 - 超文本传输协议 (HTTP/1.1): 消息语法与路由
文档信息
- RFC 编号: 7230
- 标题: HTTP/1.1: Message Syntax and Routing (消息语法与路由)
- 发布日期: 2014年6月
- 作者: R. Fielding (Adobe), J. Reschke (greenbytes)
- 状态: 标准追踪 (Standards Track)
- 废弃: RFC 2616, RFC 2145
- 更新: RFC 2817, RFC 2818
摘要
超文本传输协议 (Hypertext Transfer Protocol, HTTP) 是一种用于分布式、协作式超文本信息系统的无状态应用层协议。本文档概述了 HTTP 架构及其相关术语,定义了 "http" 和 "https" 统一资源标识符 (URI) 方案,定义了 HTTP/1.1 消息语法和解析要求,并描述了实现相关的安全考虑事项。
目录
主要章节
1. 简介
- 1.1 要求符号
- 1.2 语法符号
2. 架构
- 2.1 客户端/服务器消息传递
- 2.2 实现多样性
- 2.3 中间方
- 2.4 缓存
- 2.5 一致性与错误处理
- 2.6 协议版本控制
- 2.7 统一资源标识符
- 2.7.1 http URI 方案
- 2.7.2 https URI 方案
3. 消息格式
- 3.1 起始行
- 3.1.1 请求行
- 3.1.2 状态行
- 3.2 头部字段
- 3.2.1 字段可扩展性
- 3.2.2 字段顺序
- 3.2.3 空白字符
- 3.2.4 字段解析
- 3.2.5 字段限制
- 3.2.6 字段值组件
- 3.3 消息主体
- 3.3.1 Transfer-Encoding
- 3.3.2 Content-Length
- 3.3.3 消息主体长度
4. 传输编码
- 4.1 分块传输编码
- 4.2 压缩编码
- 4.3 TE 头部字段
- 4.4 Trailer 头部字段
5. 消息路由
- 5.1 标识目标资源
- 5.2 入站连接
- 5.3 请求目标
- 5.3.1 origin-form
- 5.3.2 absolute-form
- 5.3.3 authority-form
- 5.3.4 asterisk-form
- 5.4 Host 头部字段
- 5.5 有效请求 URI
- 5.6 关联响应与请求
- 5.7 消息转发
- 5.7.1 Via 头部字段
- 5.7.2 转换
6. 连接管理
- 6.1 Connection 头部字段
- 6.2 建立连接
- 6.3 持久连接
- 6.4 并发
- 6.5 失败与超时
- 6.6 拆除连接
- 6.7 Upgrade 头部字段
7. ABNF 列表扩展
- #rule 运算符说明
8. IANA 考虑事项
- 8.1 头部字段注册
- 8.2 URI 方案注册
- 8.3 互联网媒体类型注册
- 8.4 传输编码注册表
- 8.5 内容编码注册表
- 8.6 升级令牌注册表
9. 安全考虑事项
- 9.1 建立权威
- 9.2 中间方的风险
- 9.3 基于文件和路径名的攻击
- 9.4 基于命令、代码或查询注入的攻击
- 9.5 通过协议元素长度的攻击
- 9.6 响应分割
- 9.7 请求走私
- 9.8 消息完整性
- 9.9 服务器日志信息的隐私
附录
HTTP/1.1 规范系列
RFC 7230 是 HTTP/1.1 规范系列的第一部分,完整系列包括:
- RFC 7230 - 消息语法与路由 (本文档)
- RFC 7231 - 语义与内容
- RFC 7232 - 条件请求
- RFC 7233 - 范围请求
- RFC 7234 - 缓存
- RFC 7235 - 认证
核心概念
关键术语
- 客户端 (Client): 发起 HTTP 请求的程序
- 服务器 (Server): 接受连接并响应 HTTP 请求的程序
- 用户代理 (User Agent): 发起请求的客户端程序(浏览器、爬虫等)
- 源服务器 (Origin Server): 能够为给定资源生成权威响应的程序
- 中间方 (Intermediary): 代理、网关或隧道
- 缓存 (Cache): 存储先前响应的本地存储
HTTP 消息结构
HTTP-message = start-line
*( header-field CRLF )
CRLF
[ message-body ]
请求示例
GET /hello.txt HTTP/1.1
Host: www.example.com
User-Agent: curl/7.16.3
Accept-Language: zh-CN, en
响应示例
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Content-Length: 51
Content-Type: text/plain; charset=utf-8
你好,世界!此有效载荷包含尾随 CRLF。
重要特性
1. 无状态协议
HTTP 是无状态的请求/响应协议,每个请求都独立处理。
2. 持久连接
HTTP/1.1 默认使用持久连接,允许在单个连接上执行多个请求/响应交换。
3. 分块传输编码
支持分块传输编码,允许在不知道内容总长度的情况下发送数据。
4. 中间方支持
支持代理、网关和隧道等中间方,实现灵活的网络架构。
5. 协议升级
支持通过 Upgrade 头部字段升级到其他协议(如 WebSocket)。
安全要点
- 输入验证: 始终验证和清理用户输入,防止注入攻击
- 长度限制: 实施请求行和头部字段的长度限制
- 使用 HTTPS: 对敏感通信使用 TLS 加密
- 防止请求走私: 严格遵守消息解析规则
- 中间方安全: 谨慎处理代理和网关
- 隐私保护: 保护服务器日志中的个人信息
版权声明
Copyright © 2014 IETF Trust and the persons identified as the document authors. All rights reserved.
本文档遵循 BCP 78 和 IETF Trust's Legal Provisions,允许翻译成其他语言。
相关资源
- 官方文档: https://www.rfc-editor.org/rfc/rfc7230.html
- 勘误表: https://www.rfc-editor.org/errata_search.php?rfc=7230
- 后续版本: RFC 7230 已被 RFC 9110-9114 (HTTP Semantics) 废弃
翻译说明
本翻译严格遵循 RFC 原文,提供准确的技术术语翻译和详细的概念说明。所有 ABNF 语法定义保持原样,以确保技术准确性。
翻译质量保证:
- ✅ 专业术语准确翻译
- ✅ 完整的 ABNF 语法保留
- ✅ 技术概念详细解释
- ✅ 实际应用示例
📌 开始阅读: 从 第 1 章 - 简介 开始学习 HTTP/1.1 协议规范。