Skip to content
On this page

http 各版本之间的区别

HTTP(Hypertext Transfer Protocol)是用于在客户端和服务器之间传输数据的协议。HTTP 版本之间有一些重要的区别。以下是 HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 之间的主要区别:

HTTP 1.0:

  • 是最早的 HTTP 版本,发布于 1996 年。
  • 每次请求都需要建立新的 TCP 连接,效率较低。
  • 不支持持久连接,每次请求完成后,连接就关闭。
  • 不支持管道化,即在一个连接中同时发送多个请求,需要等待一个请求响应后才能发送下一个请求。
  • 不支持请求优先级,所有请求都是平等的。

HTTP 1.1:

  • 于 1999 年发布,是 HTTP 1.0 的改进版本。
  • 引入了持久连接,即一个连接可以处理多个请求和响应,减少了 TCP 连接的建立次数,提高了性能。
  • 引入了管道化,可以在一个连接中同时发送多个请求,避免了请求等待的问题,提高了并发性能,但是响应是按照请求的顺序返回的,假如前一个请求的响应较慢,那么后续的请求也必须等待,可能会导致队头阻塞问题,影响性能。管道化虽然可以实现并发请求,但由于请求和响应的顺序性,可能会限制其效率。
  • 引入了 Host 头部字段,使得同一个服务器可以托管多个域名。
  • 支持断点续传,可以从之前的中断处继续下载文件。

为什么相应必须按照请求时的顺序返回? 因为 HTTP 协议定义了一个 FIFO(先进先出)的处理模型,即服务器必须按照请求的顺序来处理并返回响应。虽然多个请求可以并行发送到服务器,但服务器在处理请求时必须按照接收到请求的顺序进行响应,以确保每个响应与相应的请求一一对应。如果服务器不按顺序处理响应,将会导致响应与请求不匹配,客户端可能无法正确处理响应,从而破坏了 HTTP 协议的有序性。

HTTP 2.0:

  • 于 2015 年发布,是 HTTP 1.x 系列的全面更新。
  • 引入了二进制分帧层,取代了 HTTP 1.x 的文本协议,减少了协议头的大小,提高了解析效率。 HTTP/2.0 的二进制分帧层将 HTTP 消息分解为更小的二进制帧,每个帧都以二进制形式表示。这些帧可以并行地在连接上进行传输,而且可以在客户端和服务器之间进行流量控制,使得 HTTP/2.0 能够更高效地传输数据。
  • 支持多路复用,可以在同一个 TCP 连接上并发发送多个请求和响应,避免了队头阻塞问题,提高了页面加载速度。
  • 支持头部压缩,减少了重复的头部信息传输,进一步减小了数据包大小。
  • 支持服务器推送,服务器可以主动将客户端可能需要的资源推送给它,减少了请求延迟。

HTTP 3.0:

  • 于 2020 年发布,是基于 QUIC 协议的 HTTP 版本。
  • 使用 QUIC 协议代替 TCP 协议,减少了握手的时间,提高了连接建立速度。
  • 支持多路复用,类似于 HTTP 2.0,但更加高效。
  • 引入了 0-RTT 连接,允许在之前已经建立的连接上立即发送数据,进一步缩短了延迟。
  • 支持连接迁移,可以在网络切换时无缝地将连接从一个 IP 地址迁移到另一个 IP 地址。

由此可知,使用新版本的 http 协议也能够显著提升网络请求的性能。