RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
发布日期: 1999年6月
状态: 已被RFC 7230-7235替代 (Historic)
作者: R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee
摘要 (Abstract)
超文本传输协议 (Hypertext Transfer Protocol, HTTP) 是一个应用层协议,用于分布式、协作式、超媒体信息系统。它是一个通用的、无状态的协议,通过扩展其请求方法、错误代码和头字段,可以用于超文本之外的许多任务,如名称服务器和分布式对象管理系统。HTTP的一个特性是数据表示的类型化和协商,允许系统独立于传输的数据而构建。
HTTP自1990年以来一直被万维网全球信息倡议使用。本规范定义了被称为"HTTP/1.1"的协议,是对RFC 2068的更新。
目录 (Table of Contents)
核心章节
- 1. Introduction (简介)
- 1.1 Purpose (目的)
- 1.2 Requirements (要求)
- 1.3 Terminology (术语)
- 1.4 Overall Operation (总体操作)
- 2. Notational Conventions and Generic Grammar (符号约定和通用语法)
- 2.1 Augmented BNF (增强BNF)
- 2.2 Basic Rules (基本规则)
- 3. Protocol Parameters (协议参数)
- 4. HTTP Message (HTTP消息)
- 5. Request (请求)
- 6. Response (响应)
- 7. Entity (实体)
- 8. Connections (连接)
- 9. Method Definitions (方法定义)
- 10. Status Code Definitions (状态码定义)
- 11. Access Authentication (访问认证)
- 12. Content Negotiation (内容协商)
- 13. Caching in HTTP (HTTP缓存)
- 14. Header Field Definitions (头字段定义)
- 15. Security Considerations (安全考虑)
- 16. Acknowledgments (致谢)
- 17. References (参考文献)
版权声明
本文档是对RFC 2616的中文翻译,仅用于教育和学习目的。
- 原始版权: Copyright (C) The Internet Society (1999). All Rights Reserved.
- 原文来源: RFC 2616官方文档
相关资源
- 官方原文: RFC 2616 (TXT)
- 官方页面: RFC 2616 DataTracker
- 替代版本: RFC 7230-7235 (HTTP/1.1 新版规范)
- 最新版本: RFC 9110-9114 (HTTP 语义和HTTP/3)
为什么RFC 2616如此重要?
历史地位
HTTP发展史:
1991 - HTTP/0.9 (简单协议)
1996 - HTTP/1.0 (RFC 1945)
1999 - HTTP/1.1 (RFC 2616) ← 经典版本 ⭐
2014 - HTTP/1.1 (RFC 7230-7235) ← 改进版本
2015 - HTTP/2 (RFC 7540)
2022 - HTTP/3 (RFC 9114)
RFC 2616统治了15年 (1999-2014),几乎所有Web开发者都学过这个版本。
核心概念
HTTP方法
| 方法 | 说明 | 幂等性 | 安全性 |
|---|---|---|---|
| GET | 获取资源 | ✅ | ✅ |
| POST | 提交数据 | ❌ | ❌ |
| PUT | 更新资源 | ✅ | ❌ |
| DELETE | 删除资源 | ✅ | ❌ |
| HEAD | 获取头部 | ✅ | ✅ |
| OPTIONS | 查询选项 | ✅ | ✅ |
| TRACE | 追踪路径 | ✅ | ✅ |
| CONNECT | 建立隧道 | ❌ | ❌ |
状态码
1xx - 信息性
100 Continue - 继续请求
101 Switching Protocols - 切换协议
2xx - 成功
200 OK - 成功
201 Created - 已创建
204 No Content - 无内容
3xx - 重定向
301 Moved Permanently - 永久移动
302 Found - 临时移动
304 Not Modified - 未修改
4xx - 客户端错误
400 Bad Request - 错误请求
401 Unauthorized - 未授权
403 Forbidden - 禁止访问
404 Not Found - 未找到
5xx - 服务器错误
500 Internal Server Error - 服务器内部错误
502 Bad Gateway - 网关错误
503 Service Unavailable - 服务不可用
常用头字段
请求头:
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/json
Content-Type: application/json
Authorization: Bearer token123
响应头:
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Cache-Control: max-age=3600
Set-Cookie: session=abc123
持久连接
HTTP/1.0: 每次请求建立新连接 ❌
请求1: 建立TCP → 发送请求 → 接收响应 → 关闭TCP
请求2: 建立TCP → 发送请求 → 接收响应 → 关闭TCP
(效率低下)
HTTP/1.1: 默认持久连接 ✅
建立TCP连接
├─ 请求1 → 响应1
├─ 请求2 → 响应2
├─ 请求3 → 响应3
└─ 关闭连接
(显著提升性能)
缓存机制
# 服务器设置缓存
Cache-Control: max-age=3600, public
Expires: Thu, 01 Dec 2024 16:00:00 GMT
ETag: "33a64df551425fcc"
Last-Modified: Wed, 01 Dec 2024 12:00:00 GMT
# 客户端验证缓存
If-None-Match: "33a64df551425fcc"
If-Modified-Since: Wed, 01 Dec 2024 12:00:00 GMT
# 服务器响应
304 Not Modified (使用缓存)
或
200 OK (返回新内容)
为什么被替代?
RFC 2616存在的问题:
❌ 单一庞大文档: 176页,难以维护
❌ 模糊定义: 某些行为定义不清
❌ 互操作性问题: 不同实现理解不一致
新版改进 (RFC 7230-7235):
✅ 模块化: 拆分为6个独立RFC
✅ 更清晰: 消除歧义
✅ 更新: 反映实际使用情况
遗产与影响
RFC 2616的持久影响:
📚 教育价值: 仍是最佳HTTP学习材料
🔧 概念基础: 核心概念未变
📖 文档风格: 影响后续RFC写作
经典示例 (仍在使用):
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<!DOCTYPE html>
<html>...