http1.0 2.0 3.0 之间的区别,以及3.0相比2.0有什么提升

584 阅读6分钟

HTTP 是用于浏览器与服务器之间通信的协议,经历了多个版本的升级和改进。每个版本的 HTTP 都针对前一版本的缺点进行了优化,提升了性能、效率和安全性。下面详细介绍 HTTP/1.0、HTTP/2.0 和 HTTP/3.0 的主要区别,并特别说明 HTTP/3.0 相比 HTTP/2.0 的提升。

一、HTTP/1.0 与 HTTP/1.1(最初版本的区别)

1. HTTP/1.0(发布于1996年)

HTTP/1.0 是第一个标准化的 HTTP 版本,它具有以下特点:

  • 短连接(非持久连接) :每次客户端请求时,浏览器会创建一个新的 TCP 连接,服务器返回响应后立即关闭连接。每个请求都需要重新建立连接,效率较低。
  • 无状态:HTTP 是无状态协议,服务器不会记录客户端的历史请求状态,每次请求都是独立的。
  • 缓存支持有限:HTTP/1.0 中支持 Expires 头来控制缓存,但没有提供更细粒度的缓存控制。

2. HTTP/1.1(发布于1997年)

  • 长连接(持久连接) :HTTP/1.1 默认启用了持久连接,即 Connection: keep-alive。客户端和服务器可以复用同一个 TCP 连接进行多个请求,减少了连接的开销。
  • 管道化(Pipelining) :HTTP/1.1 引入了管道化请求的概念,允许客户端在同一连接上并行发送多个请求,但服务器仍需按顺序返回响应。由于队头阻塞问题,管道化未被广泛使用。
  • 缓存控制:引入了 Cache-Control 头,提供了更精细的缓存管理。
  • 分块传输编码:服务器可以在响应体未完全准备好时开始传输数据,允许分块传输,提升了长响应时间的资源的传输效率。
  • Host 头支持:HTTP/1.1 要求必须在请求中携带 Host 头,以支持虚拟主机。

二、HTTP/2.0(发布于2015年)

HTTP/2.0 是对 HTTP/1.1 的重大升级,主要优化了性能和效率问题,尤其是网页加载速度。其核心特点如下:

1. 二进制分帧(Binary Framing)

HTTP/2.0 使用二进制格式传输数据,而 HTTP/1.x 是纯文本协议。通过将请求和响应数据转换为二进制帧,协议的解析更高效,也更便于传输结构化数据。

2. 多路复用(Multiplexing)

HTTP/2.0 允许在一个 TCP 连接上并行处理多个请求和响应,避免了 HTTP/1.1 中的队头阻塞问题。在同一个 TCP 连接中,多个请求可以同时发送,服务器也可以同时返回多个响应,不再需要为每个请求都创建独立的连接。

3. 头部压缩(Header Compression)

HTTP/2.0 使用 HPACK 算法对 HTTP 头部进行压缩。因为每次请求都会携带大量重复的头部信息,头部压缩可以减少冗余数据的传输,提升效率。

4. 服务器推送(Server Push)

HTTP/2.0 支持服务器主动向客户端推送资源,而不是等到客户端明确请求。这可以提前推送 CSS、JS 等资源,减少客户端请求等待时间。

5. 单连接复用

HTTP/2.0 使用单个 TCP 连接处理所有请求,而不是像 HTTP/1.1 那样为每个请求建立一个新连接。这减少了连接的创建和关闭开销。

6. 更好的优先级控制

HTTP/2.0 允许客户端为请求设置优先级,服务器可以根据优先级来决定哪些资源优先返回。

三、HTTP/3.0(基于 QUIC 协议)

HTTP/3.0 是对 HTTP 协议的进一步优化和革新,它是建立在 QUIC 协议之上的,区别于以往的 TCP 传输层协议。

1. 基于 QUIC 协议(UDP 之上)

HTTP/3.0 使用 QUIC 协议(基于 UDP 的协议)取代了 TCP 作为传输层协议。QUIC 通过减少连接建立时间和改进丢包处理,解决了 HTTP/2.0 中 TCP 相关的性能问题。

2. 无队头阻塞

虽然 HTTP/2.0 支持多路复用,但它依然依赖于 TCP,而 TCP 本身有一个问题——队头阻塞。当一个 TCP 包丢失时,整个 TCP 流都会暂停,直到丢失的数据包被重新传输。这意味着即使 HTTP/2.0 可以在同一个连接中传输多个请求,但如果一个请求出现阻塞,所有请求都会受到影响。

HTTP/3.0 基于 QUIC,直接在 UDP 之上构建传输层。QUIC 通过流的独立管理和丢包不影响其他流的机制,彻底消除了队头阻塞问题。

3. 更快的连接建立

QUIC 采用的是零往返时间握手(0-RTT)和单往返时间握手(1-RTT),相比于 TCP 需要 3 次握手才能建立连接,QUIC 可以大大减少连接建立时间,使得请求响应更加快速。

4. 内置加密

在 HTTP/3.0 中,所有连接默认使用 TLS 1.3 加密,并集成在 QUIC 协议中。相比 HTTP/2.0 通过 TCP 层建立连接后再进行加密,HTTP/3.0 直接在传输层进行加密,进一步减少了延迟。

5. 更强的丢包恢复机制

TCP 需要依赖序列号和确认应答来管理丢包,当发生丢包时,所有数据传输会被暂停,直到丢失的数据被重传。QUIC 使用流级别的丢包管理,不同的流之间是独立的,当某个流发生丢包时,其他流不会受到影响,从而提高了传输效率。

6. 多路径支持

QUIC 还支持多路径传输(Multipath),这意味着如果设备有多个网络接口(如 Wi-Fi 和蜂窝数据),QUIC 可以在多个路径上并行传输数据,从而提高网络的健壮性和传输速度。

四、HTTP/3.0 相比 HTTP/2.0 的提升

  1. 队头阻塞彻底消除:HTTP/2.0 仍然存在 TCP 层的队头阻塞问题,而 HTTP/3.0 基于 QUIC 使用独立的流管理和丢包处理机制,彻底解决了这一问题。
  2. 更低的延迟:HTTP/3.0 基于 QUIC 协议,使用 0-RTT 或 1-RTT 握手,减少了连接建立时间,尤其是在移动网络或高延迟网络下表现更加出色。
  3. 内置加密:HTTP/3.0 将 TLS 1.3 集成在传输层,进一步简化了安全连接的建立过程,并且所有连接默认都是加密的。
  4. 更好的丢包恢复:QUIC 的流级别丢包恢复机制使得 HTTP/3.0 在不稳定的网络环境下表现更好,传输更加高效,用户体验更加流畅。
  5. 多路径传输:HTTP/3.0 支持多路径传输,能够更好地利用设备的多网络环境,提高网络的健壮性和速度。

总结

  • HTTP/1.0 是最早的标准化版本,使用短连接,性能较低。
  • HTTP/1.1 改进了连接复用、管道化请求和缓存控制,大大提升了性能。
  • HTTP/2.0 引入了二进制帧、多路复用、头部压缩和服务器推送,解决了 HTTP/1.x 的性能瓶颈,但仍然依赖 TCP,有队头阻塞问题。
  • HTTP/3.0 基于 QUIC 协议,使用 UDP 传输,彻底消除了队头阻塞问题,提供了更快的连接建立、更低的延迟和更好的丢包处理机制,是对 HTTP/2.0 的重大升级。