HTTP 1.0与1.1


263

有人可以简要概述一下HTTP 1.0和HTTP 1.1之间的区别吗?我已经花了一些时间来处理这两个RFC,但是还无法消除它们之间的很多差异。维基百科说:

HTTP / 1.1(1997-1999)

当前版本; 永久连接默认情况下处于启用状态,并且可以与代理很好地配合使用。还支持请求流水线操作,允许同时发送多个请求,从而使服务器为工作量做好准备,并有可能将请求的资源更快地传输到客户端。

但这对我来说并不重要。我意识到这是一个比较复杂的主题,所以我不希望得到完整的答案,但是有人可以在较低的层次上给我简要介绍一下差异吗?
我的意思是,我正在寻找实现HTTP服务器或应用程序所需的信息。我主要是在寻找正确方向的微动,以便自己解决。


这是关键区别的一个很好的总结:http
Kev

3
很高兴您能找到源头。听起来,如果您不了解该摘要,那么您通常对网络一无所知。也许您也应该研究这些术语。
Marcin

4
尽管我仍然是新手,但是我的主要问题是摘要为我提供了更多的“内容”,而不是“方法”。
杰森·贝克


Answers:


363

代理支持和“主机”字段:

HTTP 1.1按照规范具有必需的Host标头。

HTTP 1.0并没有正式要求Host标头,但是添加一个并没有什么坏处,并且许多应用程序(代理)都希望看到Host标头,而与协议版本无关。

例:

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

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

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

持久连接:

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

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

选项方法:

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继续,继续正文。

多得多:

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

15
请注意,如果省略了Host标头,许多声称需要HTTP / 1.0的服务器/代理将非常沮丧。
Paul Tomblin,2009年

2
HTTP 1.0确实支持通过Content-Encoding标头进行压缩。正如Paul所提到的,我绝对建议任何HTTP / 1.0客户端发送Host标头,因为严格禁止这样做,并且事情会按您期望的那样工作。否则,这就是死路一条。
cpm

@Paul Tomblin:谢谢,我添加了此信息。
Brian R. Bondy

2
关于“如果blahblahlbah.com和helohelohelo.com都指向相同的IP。您的Web服务器可以使用Host字段来区分客户端计算机想要的站点。” 那么,当HTTP 1.0客户端不提供要区分的主机字段时会发生什么呢?
Pacerier

@Pacerier通常是某种默认页面;这取决于服务器。
安德鲁·兰伯特

14

HTTP 1.0(1994年)

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

HTTP 1.1(1996-2015年)

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

HTTP 1.1是HTTP 1.0的增强。以下列出了四个主要改进:

  1. 通过允许从单个IP地址提供多个域来有效利用IP地址。

  2. 通过允许Web浏览器通过单个持久连接发送多个请求来提高响应速度。

  3. 通过支持分块编码,可以更快地响应动态生成的页面,从而可以在知道响应的总长度之前发送响应。
  4. 通过添加缓存支持,可以更快地响应并节省大量带宽。

9

对于琐碎的应用程序(例如,从通过网络启用的温度计中偶尔获取温度值),HTTP 1.0对于客户端和服务器均适用。您可以用大约20行代码编写基于套接字的HTTP 1.0客户端或服务器。

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


7

关键的兼容性问题是对持久连接的支持。我最近在“支持” HTTP / 1.1的服务器上工作,但是当客户端发送HTTP / 1.0请求时无法关闭连接。编写支持HTTP / 1.1的服务器时,请确保它也可以与仅HTTP / 1.0的客户端一起使用。


8
HTTP / 1.1是否要求我们与HTTP / 1.0兼容?
Pacerier

@Troy-发送对HTTP 1.1请求的响应并在此后立即关闭连接(套接字是从服务器上读取请求的套接字)是否有效?这实际上意味着服务器实现了HTTP 1.0
Guy Avraham

5

我可以想起的第一个区别就是在同一服务器上运行的多个域,即部分资源检索,这使您可以检索并加速资源的下载(几乎每个下载加速器都这样做)。

如果您要开发类似网站或类似应用程序的应用程序,则无需太担心差异,但至少了解GETPOST动词之间的差异。

现在,如果您要开发浏览器,那么可以,您将必须了解完整的协议,以及是否要开发HTTP服务器。

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


1
Methinks Jason如果考虑从头开始构建自己的HTTP Server / app,则已经知道GET和POST之间的区别。:)
Kev

1
实际上,我已经对当前仅支持HTTP 1.0的Web服务器做了一些工作,我只是想知道添加1.1支持涉及什么。
杰森·贝克

2

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

Web流量示例:例如,如果要访问服务器。同时,如此多的用户正在访问服务器以获取数据,然后就有机会挂起服务器。这是网络流量。


1

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

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

  1. HTTP 1.1带有持久性连接,这些持久性连接定义了我们可以在同一HTTP连接上拥有多个请求或响应。
  2. 在HTTP 1.0中,您必须为每个请求和响应打开一个新连接
  3. 在HTTP 1.0中它具有编译指示,而在HTTP 1.1中它具有缓存控制,这类似于pragma

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.