HTTP协议各版本对比:1.0,1.1,2.0和3.0

介绍

从工程角度来看,网络通常考虑使用OSI模型或TCP/IP模型来定义和组织它们的操作。这些模型反过来又包括不同的层次,如网络层、传输层和应用层。

每个网络层都有特定的协议来实现各种功能。例如,网络层有IP协议,传输层有TCP和UDP协议,应用层有HTTP协议。

这些协议在不断演化,随着时间的推移被更新和扩展。因此,网络协议自然而然地有多个版本。

在这个背景下,本教程全面探讨了HTTP应用协议。首先,我们将简要回顾应用协议。然后,我们将研究HTTP的一般目的。最后,我们将查看HTTP各个版本的主要区别,并以系统性摘要进行比较。

应用层协议

应用层协议指的是在不同计算应用程序之间提供端到端通信的抽象网络层。它是OSI模型的第7层和TCP/IP模型的第4层。

在实际应用中,应用层是最接近用户的一层。因此,例如电子邮件客户端、流媒体和浏览器等客户端操作都在应用层进行。

此外,有三种主要的体系结构用于构建应用层系统:

  • 客户端-服务器:客户端-服务器架构的主要特点是有多个客户端从一个集中的服务器请求和接收服务。
  • 点对点(Peer-to-Peer):点对点架构考虑了一个连接在网络中的独立计算机集合,它们合作执行操作。
  • 混合架构:混合架构同时使用服务器和对等节点来执行操作。

自然地,应用层利用了较低层的功能。例如,应用层协议假定其他层会处理与网络中正确目标计算机的通信。

最后,一些常见的应用层协议示例包括HTTP、FTP、TELNET、POP、DNS和SMTP。

超文本传输协议

HTTP是一种应用层协议(OSI第7层和TCP/IP第4层),用于创建分布式超媒体系统。由于它在应用层运行,因此它对于一些网络方面,如寻址和传输,是不可知的。

从历史上看,HTTP起初是一个简单的协议,用于在互联网上实现客户端和服务器之间的通信。自发布以来,HTTP已成为在万维网上交换信息的最重要的协议之一。

因此,HTTP自上世纪90年代以来一直被用于互联网。最初的HTTP版本(0.9)非常有限。这个版本只允许客户端使用一个操作(GET)从服务器请求信息。

第一个HTTP版本只支持传输ASCII数据。然而,在随后的版本中,这种支持扩展到其他数据类型。

HTTP依赖于TCP/IP来工作。这意味着HTTP是一种基于连接的协议。因此,我们可以将HTTP会话理解为服务器与客户端之间的一系列消息交换。

在接下来的子章节中,我们将探讨每个发布的HTTP版本,从1.0到3.0,重点关注它们相对于先前版本的特点和创新。

HTTP 1.0

正如之前介绍的,HTTP的第一个版本只允许从服务器获取信息。然而,随着互联网的发展和新功能的出现,这已经不足以满足需求。

在这个背景下,HTTP的第1.0版本于1996年发布,比第0.9版本发布大约五年。

HTTP 1.0引入了一些新的实用功能,让我们看看其中一些:

头部(Header):HTTP 0.9请求仅由方法和资源名称组成。而HTTP 1.0引入了HTTP头部,从而允许传输元数据,使协议更加灵活和可扩展。

版本信息(Versioning):HTTP请求明确指出了所使用的版本,并将其附加在请求行中。

状态码(Status Code):HTTP响应现在包含了一个状态码,使接收方能够检查请求的处理状态(成功或失败)。

内容类型(Content-Type):借助HTTP头部,特别是Content-Type字段,HTTP可以传输除了纯HTML文件以外的其他文档类型。

新方法(New Methods):除了GET之外,HTTP 1.0提供了两种新方法(POST和HEAD)。

总之,HTTP 1.0比0.9版本更加强大。协议改进的最大贡献者是HTTP头部和新的HTTP方法。

因此,HTTP头部使客户端能够发送和接收不同类型的文件,并交换相关的元数据。而新的方法则使客户端既能够仅检索有关文档的元数据(HEAD),又能够将数据从客户端传输到服务器(POST)。

HTTP 1.1

HTTP的1.1版本于1997年发布,距离上一个版本1.0仅一年。HTTP 1.1是HTTP 1.0的增强版本,提供了许多扩展功能。

在最重要的增强功能中,我们可以列举以下几点:

  • 主机头部(Host Header):HTTP 1.0在规范中并没有正式要求主机头部,而HTTP 1.1则要求它。主机头部对于通过代理服务器路由消息特别重要,允许区分指向相同IP的域名。

  • 持久连接(Persistent Connections):在HTTP 1.0中,每个请求/响应对都需要打开一个新连接。而在HTTP 1.1中,可以使用单个连接执行多个请求。

  • 继续状态(Continue Status):为了避免服务器拒绝不可处理的请求,现在客户端可以首先只发送请求头,并检查是否收到继续状态码(100)。

  • 新方法(New Methods):除了HTTP 1.0中已有的方法,1.1版本添加了六种额外的方法:PUT、PATCH、DELETE、CONNECT、TRACE和OPTIONS。

除了上述突出的增强功能外,HTTP 1.1版本还引入了许多其他功能,如压缩和解压缩、多语言支持和字节范围传输。

具体来说,新方法在使用HTTP方面带来了真正的改进。PUT方法负责替换已经存在的资源。PATCH方法更新已经存在资源的特定数据。另一方面,DELETE方法删除已经存在的资源。

HTTP CONNECT方法可以通过代理服务器创建一个隧道。TRACE方法执行从客户端到目标服务器的路径回环测试。最后,OPTIONS方法返回有关与服务器可用通信选项的信息。

HTTP 2.0

HTTP 2.0正式发布于2015年,距离HTTP 1.1大约有18年的时间。特别是,HTTP 2.0的重点是改进协议的性能。

为了实现这一目标,HTTP 2.0实施了多项功能来改进连接和数据交换。让我们看看其中一些:

  • 请求多路复用(Request Multiplexing):HTTP 1.1是一个顺序协议,因此一次只能发送一个请求。而HTTP 2.0允许异步发送请求和接收响应。这样,我们可以使用单个连接同时进行多个请求。

  • 请求优先级(Request Prioritization):使用HTTP 2.0,我们可以在一批请求中设置数值优先级。因此,我们可以明确指定期望的响应顺序,例如在获取网页的CSS文件之前获取其JS文件。

  • 自动压缩(Automatic Compression):在之前的HTTP版本(1.1)中,我们必须明确要求请求和响应的压缩。然而,HTTP 2.0会自动执行GZip压缩。

  • 连接重置(Connection Reset):这是一种功能,允许出于某种原因关闭服务器和客户端之间的连接,然后立即打开一个新连接。

服务器推送(Server Push):为了避免服务器接收大量请求,HTTP 2.0引入了服务器推送功能。通过这个功能,服务器尝试预测哪些资源将很快被请求。因此,服务器会主动将这些资源推送到客户端缓存中。

此外,HTTP 2.0成为了一种二进制协议,取代了以前的HTTP纯文本版本。总之,我们可以将HTTP 2.0视为一系列增强功能的修补程序,以解决最后HTTP版本的问题和限制。

HTTP 3.0

HTTP 3.0与以前的HTTP版本不同,以前的HTTP版本是Internet工程任务组(IETF)的“请求评论”(RFC)文档。

HTTP 2.0和HTTP 3.0的主要区别在于所使用的传输层协议。在HTTP 2.0中,我们使用TCP连接,可以选择是否使用TLS(HTTPS和HTTP)。而HTTP 3.0则基于QUIC(Quick UDP Internet Connections)设计。

简言之,QUIC是一种传输层协议,具有本地多路复用和内置加密。QUIC提供了快速的握手过程,可以缓解在丢包率高和网络连接较慢的情况下出现的延迟问题。

除了继承自QUIC的潜在优势外,HTTP 3.0的另一个重要特点是它始终创建加密连接。因此,它类似于在当前HTTP 2.0中始终使用HTTPS。这种对安全和加密的强调与现代网络通信的最佳实践一致,有助于保护通过互联网传输的数据的隐私和完整性。

总结

目前,HTTP是一个非常重要的协议,支持在互联网上运行的多个系统。首次发布于1991年,这个协议经历了多个更新,经历了多个版本。

从第一个发布版本(版本0.9)到HTTP 2.0的发布,我们对HTTP的功能进行了多次增强,还在协议中进行了扩展,以添加新的方法和功能。

这些增强和新特性的示例包括协议头部(1.0)、状态码(1.0)、持久连接(1.1)、请求多路复用(2.0)和服务器推送(2.0)。

除了先前提到的新功能之外,我们还引入了新的方法,除了标准的GET方法:POST(1.0)、HEAD(1.0)、PUT(1.1)、PATCH(1.1)、DELETE(1.1)、CONNECT(1.1)、TRACE(1.1)和OPTIONS(1.1)。

然而,在HTTP 3.0中,这里的主要新特性不是特定的新功能。实际上,HTTP 3.0用一个新的传输层协议QUIC替代了HTTP从其第一个版本开始使用的TCP协议。

通过用QUIC替代TCP,HTTP的开发者希望在其他改进方面实现本机和标准的加密(不再有HTTP和HTTPS,每个HTTP通信都被加密)以及快速建立连接。

下面的图片总结了HTTP从其第一个发布版本(版本0.9)到最后一个提议版本(版本3.0)的演变:
http-versions