HTTP/1.1 协议更新:RFC 2616 遭废弃

  • 郭蕾

2014 年 6 月 9 日

话题:DevOps语言 & 开发架构

HTTP/1.1 协议更新:RFC2616 遭废弃

近日,IETF 更新了 HTTP/1.1 协议,这是 10 多年来 HTTP/1.1 协议的首次重大更新。组织者将原来的RFC 2616拆分为六个单独的协议说明,并重点对原来语义模糊的部分进行了解释,新的协议说明更易懂、易读。新的协议说明包括以下六部分:

  • RFC7230 - HTTP/1.1: Message Syntax and Routing - low-level message parsing and connection management
  • RFC7231 - HTTP/1.1: Semantics and Content - methods, status codes and headers
  • RFC7232 - HTTP/1.1: Conditional Requests - e.g., If-Modified-Since
  • RFC7233 - HTTP/1.1: Range Requests - getting partial content
  • RFC7234 - HTTP/1.1: Caching - browser and intermediary caches
  • RFC7235 - HTTP/1.1: Authentication - a framework for HTTP authentication

早在 2007 年,IETF 内部就成立了名为HTTPbis的工作小组来完成对 HTTP/1.1 的修订,他们的目标是让 HTTP/1.1 协议规范更加清晰易读,而不是添加新特性或者升级协议。在整个协议的修订过程中,小组成员共发布了 26 个草稿版本,修改次数超过 2600 次,处理了 550 多个问题。在文档整理过程中,HTTPbis 也对 HTTP/1.1 协议的一些不合理或者不安全的地方进行了改进,Evert 在其博客上总结了此次更新中的一些重大变化:

  1. 对如何处理不应该出现的空格进行了规定,将修复 HTTP Response Splitting 漏洞
  2. 移除每个服务器两个连接的限制
  3. 不再支持 HTTP/0.9
  4. 默认编码不再是 ISO-8859-1
  5. 服务器不再被强制要求处理所有 Content-* 请求头内容
  6. PUT 请求头禁止使用 Content-Range
  7. 如果请求头中 Referer 不存在,建议使用 about:blank,以便对“没有 Referer”和“我不想发送 Referer”加以区别
  8. 状态码 204, 404, 405, 414 和 501 现在可以缓存了(cachable)
  9. 状态码 301 和 302 现在允许用户代理(user-agent)将请求方式从 POST 改为 GET。虽然原标准不允许,但其实人们早就在这样做了,标准迎合现实,这就是个很好的例子。
  10. 请求头的 Location 现在可以包含相对 URI 和片段标识符(fragment identifiers)
  11. Content-MD5 被移除

更多详细的改进内容请读者阅读 RFC 中的Changes from RFC 2616部分。

DevOps语言 & 开发架构