Skip to main content

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 规范系列的第一部分,完整系列包括:

  1. RFC 7230 - 消息语法与路由 (本文档)
  2. RFC 7231 - 语义与内容
  3. RFC 7232 - 条件请求
  4. RFC 7233 - 范围请求
  5. RFC 7234 - 缓存
  6. 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)。

安全要点

  1. 输入验证: 始终验证和清理用户输入,防止注入攻击
  2. 长度限制: 实施请求行和头部字段的长度限制
  3. 使用 HTTPS: 对敏感通信使用 TLS 加密
  4. 防止请求走私: 严格遵守消息解析规则
  5. 中间方安全: 谨慎处理代理和网关
  6. 隐私保护: 保护服务器日志中的个人信息

版权声明

Copyright © 2014 IETF Trust and the persons identified as the document authors. All rights reserved.

本文档遵循 BCP 78 和 IETF Trust's Legal Provisions,允许翻译成其他语言。

相关资源


翻译说明

本翻译严格遵循 RFC 原文,提供准确的技术术语翻译和详细的概念说明。所有 ABNF 语法定义保持原样,以确保技术准确性。

翻译质量保证:

  • ✅ 专业术语准确翻译
  • ✅ 完整的 ABNF 语法保留
  • ✅ 技术概念详细解释
  • ✅ 实际应用示例

📌 开始阅读: 从 第 1 章 - 简介 开始学习 HTTP/1.1 协议规范。