281

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

HTTP/1.1 (1997-1999)

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

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

4

7 回答 7

392

代理支持和主机字段:

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

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

例子:

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

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

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

持久连接:

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

多得多:

  • 摘要认证和代理认证
  • 额外的新状态码
  • 分块传输编码
  • 连接头
  • 增强的压缩支持
  • 更多。
于 2008-10-29T14:33:30.000 回答
19

 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. 通过添加缓存支持,更快的响应和更大的带宽节省。
于 2015-10-29T23:47:09.870 回答
12

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

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

于 2008-10-29T14:13:43.813 回答
8

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

于 2008-10-29T14:34:15.300 回答
5

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

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

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

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

于 2008-10-29T13:59:23.530 回答
3

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

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

于 2017-03-02T12:36:59.793 回答
2

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

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

  1. HTTP 1.1 带有持久连接,它定义了我们可以在同一个 HTTP 连接上拥有多个请求或响应。
  2. 而在 HTTP 1.0 中,您必须为每个请求和响应打开一个新连接
  3. 在 HTTP 1.0 中它有一个 pragma,而在 HTTP 1.1 中它有 Cache-Control 这类似于 pragma
于 2020-02-18T05:53:06.517 回答