Skip to content

目录

核心思想

技术的演进总是为了解决"效率"和"性能"的问题。HTTP 的发展史,本质上就是一部为了让浏览器更快地加载网页内容而不断优化的奋斗史。其核心目标始终是:降低延迟、提高并发。


一:HTTP/1.1

在 HTTP/1.1 之前,有一个叫 HTTP/1.0 的版本,每次请求资源(比如获取一个 CSS 文件、一个 JS 文件)都需要建立一个新的 TCP 连接,用完就关掉,效率极低。

1. 解决了什么核心痛点?

解决了 HTTP/1.0 频繁建立和断开 TCP 连接 所带来的巨大性能开销。TCP 连接的建立需要"三次握手",这是一个耗时的过程。

2. 关键改进

  • 长连接: 这是 HTTP/1.1 最核心的改进。默认情况下,一个 TCP 连接可以被多个 HTTP 请求复用,不必每次都重新建立。
  • 管道化: 允许客户端在一个 TCP 连接上,连续发送多个请求,而不用等待前一个请求返回。

从"单人收银台"到"批量下单"

  • HTTP/1.0:想象一个效率极低的收银台。你必须把一件商品放到传送带上,收银员扫码、结账,你付完钱后,才能再放上第二件商品。
  • HTTP/1.1 的长连接 + 管道化:收银台升级了。你现在可以一次性把你购物车里所有的商品(请求)都放到传送带上,收银员(服务器)会按顺序逐个处理。你不用拿一件、等一次、再拿下一件。这大大减少了你和收银员之间的等待时间。

3. 留下的核心问题:队头阻塞

虽然管道化允许一次性发送所有请求,但服务器必须按顺序返回响应。如果第一个请求(比如一个很大的 JS 文件)处理得很慢,那么后面的所有请求(哪怕是一些很小的图片)即使已经处理完了,也必须排队等着,直到第一个请求的响应发送完毕。

传送带上的"大件商品"

就像在超市传送带上,你虽然把所有商品都放上去了,但如果排在最前面的是一个需要复杂包装的"大件商品"(慢请求),收银员就会卡在这里,后面所有"小商品"(快请求)都得等着,无法先被处理。这就是"队头阻塞"。


二:HTTP/2

HTTP/1.1 的队头阻塞问题成为了性能瓶颈。无论我们开多少个 TCP 连接(浏览器通常限制为 6-8 个),每个连接内部的阻塞问题依然存在。为了从根本上解决这个问题,HTTP/2 诞生了。

1. 解决了什么核心痛点?

解决了 HTTP/1.1 层的队头阻塞问题,大幅提高了单一连接的传输效率。

2. 关键改进

  • 多路复用: 这是 HTTP/2 最革命性的改进。在一个 TCP 连接内,允许多个请求/响应双向、并行地传输,而不会互相阻塞。
  • 二进制分帧: 将所有传输的信息(HTTP 消息)分割为更小的消息和帧,并采用二进制格式编码。这就像把大货物拆分成标准尺寸的小包裹,便于管理和运输。
  • 头部压缩: 使用 HPACK 算法压缩请求头,减少了每次请求的数据量。

从"单车道"到"多路复用快车道"

  • HTTP/1.1:是一条单向的乡间小路。一次只能跑一辆车,即使你想同时运送多批货物,也必须让它们排成一队,前车不走,后车只能等待。
  • HTTP/2 的多路复用:把这条路彻底改造成了一条拥有多个车道的高速公路。你的所有货物(请求)被拆分成一个个标准集装箱(二进制帧),并被贴上标签(Stream ID)。现在,所有集装箱可以同时在不同车道上飞驰,并行运输。到达目的地后,再根据标签重新组装成完整的货物。一个集装箱的延迟或丢失,不会影响其他车道的集装箱。

3. 留下的核心问题:TCP 层的队头阻塞

HTTP/2 虽然解决了应用层的队头阻塞,但它的根基——TCP 协议本身,却存在着固有的队头阻塞问题。TCP 是一个可靠的协议,它要求数据包必须按顺序到达。如果在这个"多路复用高速公路"上,有一个集装箱(TCP 数据包)在运输途中丢失了,那么 TCP 协议会要求暂停所有车道,等待这个丢失的集装箱被重新发来,然后才能继续前进。这在网络不佳(如移动网络)的情况下,会造成所有 HTTP/2 的"车道"被卡住,性能急剧下降。


三:HTTP/3

为了彻底摆脱 TCP 的历史包袱,HTTP/3 做出了一个大胆的决定:抛弃 TCP,改用一个全新的基于 UDP 的协议——QUIC。

1. 解决了什么核心痛点?

解决了 TCP 层的队头阻塞 问题,并在连接建立速度、网络切换支持等方面做了巨大优化。

2. 关键改进

  • 基于 QUIC 协议: QUIC (Quick UDP Internet Connections) 是一个基于 UDP 的传输层协议。UDP 本身是非连接、不可靠的,但 QUIC 在 UDP 之上实现了可靠性、拥塞控制、流量控制等功能,集 TCP、TLS、HTTP/2 的优点于一身。
  • 真正的多路复用: QUIC 的每个"流"(Stream) 都是完全独立的。一个流的数据包丢失,不会影响其他任何流的传输。
  • 更快的连接建立: QUIC 将 TCP 的三次握手和 TLS 的加密握手(需要 1-3 个 RTT)合并,大大减少了连接建立的时间,理想情况下只需要 0-RTT。

从"高速公路系统"到"无人机物流网络"

  • HTTP/2 (基于 TCP):是一个统一调度的高速公路系统。虽然有多条车道,但整个系统共享同一个交通控制中心(TCP 拥塞控制)。一旦发生一次严重事故(丢包),控制中心会拉响警报,封锁整个高速公路,所有车道都动弹不得,直到事故处理完毕。
  • HTTP/3 (基于 QUIC):彻底抛弃了公路系统,改用一个独立的无人机物流网络。每个集装箱(数据包)都由一架独立的无人机负责运输。它们各自规划路线,独立飞行。即使某一架无人机在中途出现故障或丢失,也绝对不会影响其他无人机的飞行。这在信号不稳定的移动网络环境下,表现得尤为出色。

总结

版本核心改进解决了什么问题引入/留下的问题
HTTP/1.1长连接、管道化HTTP/1.0 的高延迟和连接开销应用层的队头阻塞
HTTP/2多路复用、二进制分帧HTTP/1.1 的队头阻塞,提升了单一连接效率TCP 层的队头阻塞
HTTP/3基于 QUIC 协议TCP 层的队头阻塞,优化了连接建立和网络切换QUIC 协议的普及和网络设备支持度

基于 VitePress 的本地知识库