有人能给我简单介绍一下HTTP 1.0和HTTP 1.1的区别吗?我在这两个rfc上都花了一些时间,但并没有发现它们之间的很多区别。维基百科是这么说的:

HTTP / 1.1 (1997 - 1999) 当前版本;默认情况下启用持久连接,并且与代理一起工作良好。还支持请求流水线,允许同时发送多个请求,允许服务器为工作负载做好准备,并可能更快地将请求的资源传输到客户端。

但这对我来说意义不大。我知道这是一个有点复杂的话题,所以我不期待一个完整的答案,但有人能从更低的层次给我一个简要的差异概述吗? 我的意思是,我正在寻找实现HTTP服务器或应用程序所需的信息。我主要是在寻找一个正确的方向,这样我就可以自己解决问题了。


当前回答

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

其他回答

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

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

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

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

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

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

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

代理支持和主机字段:

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通过使用“实体标签”扩展了缓存支持。 如果两个资源是相同的,那么它们将具有相同的实体标记。

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

还有与缓存相关的进一步添加,如Cache-Control头。

100继续状态:

HTTP/1.1中有一个新的返回码100继续。这是为了防止客户端在不确定服务器是否能够处理请求或被授权处理请求时发送大请求。在这种情况下,客户端只发送消息头,服务器会告诉客户端100继续,继续发送消息体。

更多:

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

●HTTP 1.0 (1994)

它仍在使用中 可以被不能处理分块的客户端使用吗 (或压缩的)服务器应答

【HTTP 1.1(1996- 2015)】

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

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

有效的使用IP地址,通过允许多个域 从一个IP地址提供服务。 更快的响应,通过允许网络浏览器发送多个 通过单个持久连接的请求。 对动态生成页面的更快响应,支持 分块编码,允许在响应之前发送响应 总长度是已知的。 更快的响应和巨大的带宽节省,通过增加缓存 支持。