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 在其博客上总结了此次更新中的一些重大变化:
- 对如何处理不应该出现的空格进行了规定,将修复 HTTP Response Splitting 漏洞
- 移除每个服务器两个连接的限制
- 不再支持 HTTP/0.9
- 默认编码不再是 ISO-8859-1
- 服务器不再被强制要求处理所有 Content-* 请求头内容
- PUT 请求头禁止使用 Content-Range
- 如果请求头中 Referer 不存在,建议使用 about:blank,以便对“没有 Referer”和“我不想发送 Referer”加以区别
- 状态码 204, 404, 405, 414 和 501 现在可以缓存了(cachable)
- 状态码 301 和 302 现在允许用户代理(user-agent)将请求方式从 POST 改为 GET。虽然原标准不允许,但其实人们早就在这样做了,标准迎合现实,这就是个很好的例子。
- 请求头的 Location 现在可以包含相对 URI 和片段标识符(fragment identifiers)
- Content-MD5 被移除
更多详细的改进内容请读者阅读 RFC 中的 Changes from RFC 2616 部分。
评论