HTTP 1.0 与 1.1

Posted

技术标签:

【中文标题】HTTP 1.0 与 1.1【英文标题】:HTTP 1.0 vs 1.1 【发布时间】:2010-09-19 19:09:49 【问题描述】:

有人可以简要介绍一下 HTTP 1.0 和 HTTP 1.1 之间的区别吗?我在这两个 RFC 上都花了一些时间,但无法找出它们之间的很多区别。***是这样说的:

HTTP/1.1 (1997-1999)

当前版本;默认情况下启用持久连接,并且可以很好地与代理配合使用。还支持请求管道,允许同时发送多个请求,允许服务器为工作负载做好准备,并可能更快地将请求的资源传输到客户端。

但这对我来说意义不大。我意识到这是一个有点复杂的主题,所以我不期待一个完整的答案,但是有人可以给我简要概述一下较低级别的差异吗? 我的意思是我正在寻找实现 HTTP 服务器或应用程序所需的信息。我主要是在寻找正确的方向,以便我自己解决。

【问题讨论】:

感谢您找到源头。如果您不了解该摘要,听起来您一般对网络不太了解。也许您也应该研究这些术语。 虽然在这方面我还是个新手,但我的主要问题是总结给了我更多的“是什么”而不是“如何”。 RFC 2616, Section 19.6.1: "Changes from HTTP/1.0" www8.org/w8-papers/5c-protocols/key/key.html 【参考方案1】:

我能回忆起的第一个区别是在同一服务器上运行的多个域,部分资源检索,这允许您检索和加速资源的下载(几乎每个下载加速器都是确实)。

如果你想开发一个像网站或类似的应用程序,你不需要太担心差异,但你应该知道GETPOST动词之间的区别至少。

现在,如果您想开发浏览器,那么是的,您必须了解完整的协议,以及如果您正在尝试开发 HTTP 服务器。

如果您只对了解 HTTP 协议感兴趣,我建议您从 HTTP/1.1 而不是 1.0 开始。

【讨论】:

如果 Jason 正在考虑从头开始构建自己的 HTTP 服务器/应用程序,他已经知道 GET 和 POST 之间的区别。 :) 我实际上已经使用当前仅支持 HTTP 1.0 的网络服务器做了一些工作,我只是想知道添加 1.1 支持涉及什么。【参考方案2】:

对于琐碎的应用程序(例如,偶尔从启用 Web 的温度计中检索温度值)HTTP 1.0 对客户端和服务器都适用。您可以用大约 20 行代码编写一个基于套接字的准系统 HTTP 1.0 客户端或服务器。

对于更复杂的场景,HTTP 1.1 是可行的方法。为了处理更复杂的 HTTP 1.1 协议的复杂性,预计代码大小会增加 3 到 5 倍。复杂性主要来自于在 HTTP 1.1 中,您将需要创建、解析和响应各种标头。您可以通过让客户端使用 HTTP 库或服务器使用 Web 应用程序服务器来保护您的应用程序免受这种复杂性的影响。

【讨论】:

【参考方案3】:

代理支持和主机字段:

HTTP 1.1 根据规范有一个必需的 Host 标头。

HTTP 1.0 没有正式要求 Host 标头,但添加一个也没有什么坏处,许多应用程序(代理)希望看到 Host 标头,而不管协议版本如何。

例子:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

此标头很有用,因为它允许您通过代理服务器路由消息,还因为您的网络服务器可以区分同一服务器上的不同站点。

这意味着如果您有 blahblahlbah.com 和 helohelohelo.com 都指向同一个 IP。您的 Web 服务器可以使用 Host 字段来区分客户端计算机想要哪个站点。

持久连接:

HTTP 1.1 还允许您拥有持久连接,这意味着您可以在同一个 HTTP 连接上拥有多个请求/响应。

在 HTTP 1.0 中,您必须为每个请求/响应对打开一个新连接。每次响应后,连接都会关闭。由于TCP Slow Start,这会导致一些很大的效率问题。

OPTIONS方法:

HTTP/1.1 引入了 OPTIONS 方法。 HTTP 客户端可以使用此方法来确定 HTTP 服务器的能力。它主要用于 Web 应用程序中的跨域资源共享。

缓存:

HTTP 1.0 支持通过标头进行缓存:If-Modified-Since。

HTTP 1.1 通过使用称为“实体标记”的东西在缓存支持上进行了大量扩展。 如果 2 个资源相同,则它们将具有相同的实体标签。

HTTP 1.1 还添加了 If-Unmodified-Since、If-Match、If-None-Match 条件头。

还有更多与缓存相关的附加功能,例如 Cache-Control 标头。

100 继续状态:

HTTP/1.1 100 Continue 中有一个新的返回码。这是为了防止客户端在客户端甚至不确定服务器是否可以处理请求或被授权处理请求时发送大请求。在这种情况下,客户端只发送标头,服务器将告诉客户端 100 Continue,继续使用正文。

更多:

摘要式身份验证和代理身份验证 额外的新状态代码 分块传输编码 连接头 增强的压缩支持 更多。

【讨论】:

请注意,如果您省略 Host 标头,许多声称需要 HTTP/1.0 的服务器/代理会非常沮丧。 HTTP 1.0 确实支持通过 Content-Encoding 标头进行压缩。正如 Paul 所提到的,我肯定会推荐任何 HTTP/1.0 客户端发送 Host 标头,因为并非严格禁止这样做,而且事情通常会按您期望的那样工作。否则,这已经死了。 @Paul Tomblin:谢谢我添加了这个信息。 关于“如果你有 blahblahlbah.com 和 helohelohelo.com 都指向同一个 IP。你的 Web 服务器可以使用 Host 字段来区分客户端机器想要哪个站点。”那么当 HTTP 1.0 客户端没有给我们提供主机字段来区分时会发生什么? @Pacerier 通常是某种默认页面;这取决于服务器。【参考方案4】:

一个关键的兼容性问题是对persistent connections 的支持。我最近在“支持”HTTP/1.1 的服务器上工作,但在客户端发送 HTTP/1.0 请求时未能关闭连接。在编写支持 HTTP/1.1 的服务器时,请确保它也适用于仅支持 HTTP/1.0 的客户端。

【讨论】:

HTTP/1.1 是否要求我们兼容 HTTP/1.0? @Troy - 发送对 HTTP 1.1 请求的响应并立即关闭连接(从服务器上读取请求的套接字)是否有效?这实际上意味着服务器实现了 HTTP 1.0【参考方案5】:

 HTTP 1.0 (1994)

仍在使用中 可由无法处理分块的客户端使用 (或压缩的)服务器回复

 HTTP 1.1 (1996-2015)

对 1.0 版的许多扩展进行正式化 支持持久和管道连接 支持分块传输、压缩/解压缩 支持虚拟主机(具有单个 IP 地址的服务器托管多个域) 支持多种语言 支持字节范围传输;用于恢复中断的数据 转让

HTTP 1.1 是对 HTTP 1.0 的增强。下面列出了 四大改进:

    有效使用 IP 地址,允许多个域 从单个 IP 地址提供服务。

    通过允许网络浏览器发送多个 通过单个持久连接请求。

    动态生成的页面响应更快,支持 分块编码,允许在响应之前发送响应 总长度已知。 通过添加缓存实现更快的响应和极大的带宽节省 支持。

【讨论】:

【参考方案6】:

HTTP 1.1 是超文本传输​​协议的最新版本,它是运行在 Internet 的 TCP/IP 协议套件之上的万维网应用程序协议。与 HTTP 1.0 相比,HTTP 1.1 提供了比原始 HTTP 更快的网页交付并减少了 Web 流量。

Web 流量示例:例如,如果您正在访问服务器。同时有这么多用户访问服务器获取数据,那么就有机会挂掉服务器。这是网络流量。

【讨论】:

【参考方案7】:

HTTP 1.1 在其规范中带有主机头,而 HTTP 1.0 没有正式的主机头,但它不会拒绝添加。

主机头很有用,因为它允许客户端通过代理服务器路由消息,1.0 和 1.1 版本 HTTP 之间的主要区别是:

    HTTP 1.1 带有持久连接,它定义了我们可以在同一个 HTTP 连接上拥有多个请求或响应。​​ 在 HTTP 1.0 中,您必须为每个请求和响应打开一个新连接 在 HTTP 1.0 中它有一个编译指示,而在 HTTP 1.1 中它有 Cache-Control 这类似于pragma

【讨论】:

以上是关于HTTP 1.0 与 1.1的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 1.0 与 1.1

HTTP 1.1与HTTP 1.0的比较

Linux-http1.0-http1.1-http2.0区别

(纯干货)HTTP/1.0/1.1/2.0的区别以及http和https的区别

HTTP 1.0、1.1、2.0、3.0区别

HTTP缓存 1.0 vs 1.1