跳到主要内容

HTTP 版本演进:HTTP/0.9 到 HTTP/3,到底解决了什么问题?

面试速答(30 秒版 TL;DR)

  • HTTP 版本演进本质上是在持续优化三件事:延迟、并发效率、传输可靠性
  • HTTP/1.0 的问题是默认短连接、能力简单;HTTP/1.1 通过持久连接、Host 头等机制解决了很多实用问题。
  • HTTP/2 的核心是二进制分帧、多路复用、头部压缩、服务器推送;它解决了应用层队头阻塞前的一大批低效问题。
  • HTTP/3 最大变化不是“语法又改了”,而是底层从 TCP 换成了 QUIC/UDP,重点解决 传输层队头阻塞连接迁移
  • 面试别只背特性名,要能讲出“上一代的痛点是什么,下一代为什么这么设计”。

一条主线:每个版本都在修上一代的瓶颈

如果把演进逻辑讲成一句话:

  • HTTP/1.x 主要在“文本协议 + TCP 连接效率”上打补丁;
  • HTTP/2 在应用层重构消息传输方式;
  • HTTP/3 则继续下探到底层传输协议。

1. HTTP/0.9:几乎只有“拿一个页面”

特点非常少:

  • 只支持 GET
  • 没有请求头、响应头
  • 没有状态码
  • 响应内容基本就是 HTML 文本

它更像一个“能从服务器取页面”的最早形态,不适合现代 Web。


2. HTTP/1.0:开始像一个正式协议

HTTP/1.0 把现代 HTTP 的很多基础概念补上了:

  • 请求方法不止 GET
  • 引入请求头和响应头
  • 引入状态码
  • 可以传多种内容类型,而不只是 HTML

但它有一个关键问题:

  • 默认短连接。一次请求基本对应一次 TCP 连接,请求完就断。

这意味着一个页面要加载 HTML、CSS、JS、图片时,会频繁建连和断连,成本很高。


3. HTTP/1.1:工程上真正大规模可用的版本

HTTP/1.1 在面试里必须会,因为今天大量接口与站点仍在使用它。

核心改进

  • 默认开启持久连接(Keep-Alive)
  • 支持 Host 头,允许同一 IP 承载多个域名
  • 支持更丰富的缓存控制
  • 支持分块传输(Chunked Transfer Encoding)
  • 支持管线化(Pipelining,规范支持但实际少用)

为什么它依然不够好

即便有持久连接,HTTP/1.1 仍然面临两个问题:

  1. 同一连接内请求响应基本还是串行语义
  2. 浏览器通常要开多个 TCP 连接并发下载资源

这会带来:

  • 连接数量多
  • TCP/TLS 握手成本高
  • 队头阻塞明显

这里要特别区分两个“队头阻塞”:

  • HTTP/1.1 应用层队头阻塞:前一个请求没回来,后一个请求受影响
  • TCP 传输层队头阻塞:丢包后后续字节流都得等

4. HTTP/2:把“报文传输方式”彻底重构

HTTP/2 不是把文本格式小修小补,而是引入了一套新的传输组织方式。

4.1 二进制分帧

HTTP/1.1 的报文是文本格式,HTTP/2 改成二进制帧,更适合机器解析。

4.2 多路复用

一条 TCP 连接里可以并发传多个流(stream),请求与响应被拆成很多帧交错传输。

4.3 头部压缩

HTTP 请求头经常重复,例如 Cookie、User-Agent、Accept 等。
HTTP/2 使用 HPACK 压缩,减少重复头部开销。

4.4 服务器推送

服务器可以主动推一些资源给客户端。
但实际工程中命中率、缓存协同、调试复杂度都不理想,所以后来并不是主流亮点。

HTTP/2 解决了什么,没解决什么

它解决了:

  • 多连接竞争
  • 应用层串行阻塞
  • 头部重复传输

它没彻底解决:

  • TCP 层队头阻塞

也就是说,一旦底层 TCP 某个包丢了,后续字节即使属于别的流,也得等重传。


5. HTTP/3:把底座换成 QUIC

HTTP/3 最大变化:

  • 不再跑在 TCP 上
  • 改跑在 QUIC over UDP

为什么要这么做

因为 HTTP/2 的多路复用虽然做到了应用层并发,但底层还是一个 TCP 字节流。
只要 TCP 出现丢包重传,所有流都会受影响。

QUIC 的思路是:

  • 在 UDP 之上自己实现可靠传输、拥塞控制、多路复用
  • 把“不同流互相卡住”的问题尽量隔离

HTTP/3 的收益

  • 降低传输层队头阻塞影响
  • 建连更快,TLS 1.3 能更紧密地集成到 QUIC 握手
  • 支持连接迁移,例如移动端从 Wi-Fi 切到 4G 时更友好

面试口径:

  • HTTP/3 不是“HTTP 语义重写”,请求方法、状态码、头字段这些语义没变。
  • 变化主要在传输层实现方式和性能表现上。

各版本对比

版本关键特点主要收益主要问题
HTTP/1.0文本协议、默认短连接奠定基础连接成本高
HTTP/1.1默认长连接、Host、缓存增强更适合真实网站应用层队头阻塞、并发效率一般
HTTP/2二进制分帧、多路复用、HPACK提高单连接并发能力仍受 TCP 队头阻塞影响
HTTP/3QUIC、UDP、多路复用下沉到底层更低延迟、抗阻塞、可迁移协议栈更复杂

高频题标准答法

1. HTTP/2 一定比 HTTP/1.1 快吗?

不一定。
如果站点很简单、连接复用收益不明显、网络环境一般,收益可能有限;但对资源多、请求多、延迟敏感的网站,HTTP/2 通常更有优势。

2. HTTP/2 已经多路复用了,为什么还需要 HTTP/3?

因为 HTTP/2 的多路复用发生在应用层,但底层还是 TCP。
TCP 一旦丢包,后续字节流都得等重传,这就是传输层队头阻塞。HTTP/3 用 QUIC 继续解决这个问题。

3. HTTP/3 为什么基于 UDP 还能可靠?

因为“不可靠”是 UDP 的默认能力,不代表基于 UDP 的上层协议不能自己补可靠性。
QUIC 自己实现了确认、重传、流控、拥塞控制等机制。

4. 浏览器和服务器用了 HTTP/3,前端代码需要改吗?

大多数场景不需要。
因为业务层看到的还是 HTTP 语义:URL、方法、状态码、头、Cookie 等基本保持一致。


易错点 / 坑

  • 把 HTTP/2 的“多路复用”说成彻底消灭所有队头阻塞。
  • 把 QUIC 说成“UDP 的一个别名”;它其实是构建在 UDP 上的完整传输协议。
  • 认为 HTTP/3 改了请求/响应语义。大多数语义没变,变的是底层传输实现。
  • 把 HTTP/1.1 的管线化和 HTTP/2 的多路复用混为一谈。

速记要点(可背诵)

  • HTTP 演进核心:降低延迟、提高并发、减少阻塞
  • HTTP/1.1 解决短连接问题;HTTP/2 解决应用层并发问题;HTTP/3 继续解决传输层阻塞问题。
  • HTTP/2 = 二进制分帧 + 多路复用 + 头部压缩
  • HTTP/3 = QUIC over UDP,重点是更快建连和更好的抗阻塞能力。