原文地址:www.mnot.net/blog/2014/0…
原文作者:www.mnot.net/
发布时间:2014年6月7日
不要使用RFC2616。从你的硬盘、书签中删除它,并烧掉(或负责任地回收)任何打印出来的副本。
自1999年以来,它一直作为HTTP/1.1的定义,该协议是网络的基础。它有176页,从GET、POST和DELETE的定义到TCP连接应该如何管理,它是由最初的HTTP工作组在90年代中期到后期的几年里完成的,当时网络显然会变得很大。
事实证明,它将变得比预期的还要大。人们开始将HTTP用于网络浏览以外的事情(所谓的 "HTTP APIs"),并且随着AJAX和后来HTML5的出现,他们开始以新的方式使用网络本身。
因此,很多关于RFC含义的问题开始出现;由于它是为 "旧 "网络而写的,很多情况都没有考虑到,需要澄清。而且,像许多共识文件一样,它在一些地方没有明确写下来,导致进一步的混乱。这反过来又导致人们以不同的方式解释和实现HTTP,造成互操作性(有时是安全)问题。
让它变得更好
因此,在2007年,我们在IETF中成立了一个新的工作组,名为HTTPbis,以改善该规范。我们的章程只是为了澄清,而不是改变它;我们想以更好的方式写下HTTP/1.1规范,而不是增加新的功能或引入新版本的协议。
Roy Fielding和Julian Reschke作为编辑领导了这项工作,他们把规范分成了七个部分,后来又浓缩为六个。虽然这样做增加了页数(因为大量的模板被重复),但它使草案更容易阅读,因为它更有逻辑性。由此产生的规范是。
RFC7230 - http/1.1: 消息语法和路由--低级别的消息解析和连接管理 RFC7231 - http/1.1: 语义和内容--方法、状态代码和头文件 RFC7232--http/1.1。有条件的请求--例如,If-Modified-Since RFC7233 - http/1.1: 范围请求--获取部分内容 RFC7234 - http/1.1: 缓存--浏览器和中间人的缓存 rfc7235 - http/1.1: 认证--HTTP认证的框架 一路走来,我们发布了26个版本的草案,有2600多个章节,以解决550多个问题。对这些问题的讨论带来了来自Apache、Curl、Squid、Traffic Server、HAProxy和Varnish等开源HTTP实现的人员,以及来自实施和使用HTTP的公司的人员,从微软和苹果到雅虎和谷歌。
有什么变化?每个RFC的结尾都有 "与RFC 2616相比的变化 "部分,列出了主要的差异。我们通常坚持澄清文本,尽管在某些地方我们收紧了存在严重安全或互操作性问题的东西。例如,现在已经取消了将一个头折叠成多行的做法,并且大大收紧了消息解析规则,以避免像HTTP响应分裂这样的攻击。
即使在我们刚刚澄清的地方,变化也是很大的;例如,我编辑了缓存文档,最后删除了大约10页的文字,因为2616以稍微不同的方式多次说了同样的事情
这些文件现在都是RFC,共同取代了RFC2616,应该被引用和使用。
HTTP万岁
七年的时间对于一个规范来说是漫长的,即使是像HTTP这样重要的规范。虽然我们知道这需要一段时间,但我们没有预料到会花这么长时间,而且自从我们开始工作以来,世界已经发生了很大的变化。
特别是,HTTP/2现在已经接近完成(我很快会写更多关于它的内容)。这没关系,新协议实际上需要我们为修订RFC2616所做的大部分工作。这是因为HTTP/2只改变了协议的语义在 "线上 "的表达方式,如上面的 "消息语法和路由 "规范。我们工作了这么久的其他规范是HTTP/2非常需要的,而且如果有一天我们需要的话,HTTP/3也可能会用到。
所以,熟悉一下新的HTTP/1.1;我很乐意在这里回答问题,或者你可以在工作组的邮件列表中提问。