Skip to main content

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通用语法