Skip to main content

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)

核心章节


版权声明

本文档是对RFC 2616的中文翻译,仅用于教育和学习目的。

  • 原始版权: Copyright (C) The Internet Society (1999). All Rights Reserved.
  • 原文来源: RFC 2616官方文档

相关资源


为什么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>...