此外,
自称为“HTTP/1.0”的未完全实现的应用程序激增,需要
更改协议版本,以便两个通信应用程序
确定彼此的真实能力。
2 回答
来自 RFC:
自 1990 年以来,万维网全球信息倡议一直在使用 HTTP。HTTP 的第一个版本,称为 HTTP/0.9,是一种用于通过 Internet 传输原始数据的简单协议。
改写:
在 HTTP 标准化之前,实现上存在差异,这意味着它们不能总是正确地相互通信(例如,某些 Web 浏览器不能与某些 Web 服务器一起工作)。RFC 文章将这些预标准化实现称为使用HTTP/0.9
.
RFC 1945 定义的 HTTP/1.0 通过允许消息采用类似 MIME 消息的格式来改进协议,其中包含有关传输的数据的元信息和请求/响应语义上的修饰符。然而,HTTP/1.0 没有充分考虑分层代理、缓存、持久连接的需求和虚拟主机的影响。此外,自称为“HTTP/1.0”的未完全实现的应用程序激增,需要更改协议版本,以便两个通信应用程序确定彼此的真实能力。
改写:
在 HTTP 标准化之后,因为HTTP/1.0
它确实有助于解决互操作性和兼容性问题,但1.0
协议的版本只是假设所有 HTTP 软件都能够将它用于现有应用程序,但现在HTTP/1.0
已经使用了一段时间HTTP 协议规范看到他们需要扩展 HTTP 以支持这些用例(例如代理、缓存、持久连接、虚拟主机),虽然这些事情可以使用内置的扩展机制来完成,HTTP/1.0
但他们觉得需要增加版本号,HTTP/1.1
以防止实现简单地假设远程主机支持或不支持某个功能。
例子
一个很好的例子是Host
标头,HTTP/1.1
它允许从单个 IP 地址和端口号提供服务的 Web 服务器根据Host
标头为不同的网站提供服务(因为以前HTTP/1.1
存在的 Web 服务器只能为每个 IP 地址提供一个网站,这是一个问题)。HTTP/1.0
确实允许客户端和服务器添加自己的自定义标头,例如Host
,但是客户端或服务器无法知道另一端实际上支持Host
标头。但是在HTTP/1.1
标Host
头中以前已添加到规范中,因此如果客户端和服务器都声明它们使用HTTP/1.1
,那么另一端知道他们将识别Host
标头并正确处理它。
因此,在HTTP/1.0
过去,使用自定义标头www.example.com
,如果浏览器请求它是从共享 Webhost 提供的,这就是它的结果:
Browser (to DNS server): "Please give me the IP address for 'www.example.com'"
DNS Server (to browser): "www.example.com is 198.51.100.7"
Browser (to 198.51.100.7): "Hello, I speak HTTP/1.0, please send me index.html for Host: www.example.com
Server (to browser): "I also speak HTTP/1.0, here is index.html for 'not-actually-example.com'"
正如您所看到的,not-actually-example.com
即使它要求浏览器www.example.com
,因为 Web 服务器正在使用HTTP/1.0
它不识别Host
标头,即使 Web 浏览器正在发送Host
标头(作为扩展/实验标头)。浏览器软件无法知道not-actually-example.com
用户是否想要什么。
用人类的话来说,他们说的是:很多人说他们做了 HTTP 1.0 而他们没有,以至于当有人说它时,没人知道它是否真的是 HTTP 1.0。
为了摆脱这种情况,他们选择了一个新号码。