HTTP协议版本对比
四个版本详细对比表格
特性/版本 | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
---|---|---|---|---|
出现时间 | 1996 | 1999 | 2015 | 2022 |
底层协议 | TCP | TCP | TCP | UDP + QUIC |
连接复用 | ❌ 每次请求一个连接 | ✅ 长连接(Keep-Alive) | ✅ 多路复用 | ✅ 多路复用(无队头阻塞) |
请求并发 | ❌ 串行 | ⚠️ 管道化但阻塞 | ✅ 并发(同一连接) | ✅ 并发(更低延迟) |
请求头压缩 | ❌ 无 | ❌ 无 | ✅ HPACK 压缩 | ✅ QPACK(适用于QUIC) |
服务端推送 | ❌ 不支持 | ❌ 不支持 | ✅ 支持(Server Push) | ✅ 支持 |
加密要求 | ❌ 可选(HTTP) | ❌ 可选(HTTP) | ❌ 可选(HTTP) | ✅ 默认 强制加密(TLS 1.3) |
传输机制 | 文本 | 文本 | 二进制帧 | 二进制帧 + QUIC流 |
队头阻塞 | ✅ 存在 | ✅ 存在 | ⚠️ TCP级别阻塞仍存在 | ❌ 彻底消除(基于QUIC) |
启动速度 | 慢(TCP + TLS握手) | 慢(TCP + TLS握手) | 更快(连接复用) | ✅ 快(0-RTT连接建立) |
部署难度 | 简单 | 简单 | 中等(需服务端支持) | ⚠️ 较高(需QUIC支持) |
- HTTP/1.0(1996)
- 每个请求都要建立一次TCP连接,请求结束即关闭(短连接)。
- 只能串行请求,不支持并发(浏览器会并发多个TCP连接绕过这个限制)。
- 无 Host 头,不支持虚拟主机。
- 请求头无缓存控制、冗余。
- 只支持纯文本请求/响应。
- HTTP/1.1(1999)
- 默认使用长连接(Connection: keep-alive),同一个 TCP 连接可复用多个请求。
- 支持管道化(Pipelining):可以连续发送多个请求,但必须顺序接收响应,存在队头阻塞(Head-of-line Blocking)问题。
- 支持 Host 头,实现虚拟主机功能(一个 IP 多个站点)。
- 新增了缓存控制(Cache-Control、ETag)。
- 新增了分块传输编码(Transfer-Encoding: chunked),支持动态内容。
- 大量请求头仍重复,尤其是 Cookie、User-Agent 等字段。
- HTTP/2(2015)
- 二进制协议:相比 HTTP/1.x 的文本协议,解析更快、更高效。
- 多路复用(Multiplexing):一个连接上可同时处理多个请求-响应,不再按顺序排队,无队头阻塞问题。
- 头部压缩(HPACK):减少冗余,提高传输效率。
- 服务器推送(Server Push):服务器可主动推送资源给客户端(如提前发送CSS/JS)。
- 问题:仍使用 TCP,一旦丢包,会阻塞所有流。
- HTTP/3(2022)
- 底层彻底抛弃 TCP → 使用基于 UDP 的 QUIC 协议。
- 彻底解决 TCP 队头阻塞。
- 建立连接更快:支持 0-RTT 握手。
- 自带 TLS 1.3 加密,默认启用 HTTPS。
- 更强的多路复用、更低延迟、更可靠丢包处理。
- 缺点是部署复杂、设备兼容性和网络策略限制(如防火墙拦UDP)。
HTTP/3 与 HTTP/2 对比详解
HTTP/3 = HTTP/2 语义 + QUIC(取代 TCP + TLS)作为传输层
- 使用 UDP + QUIC 替代 TCP
- TCP 是面向连接的,需要三次握手,连接建立慢。
- QUIC 是基于 UDP 的协议,支持 0-RTT/1-RTT 握手,速度快。
- QUIC 本身就内置加密(TLS 1.3),无需额外 TLS 握手。
- 真正解决队头阻塞(Head-of-line blocking)
- 在 TCP 连接中,如果一个数据包丢了,必须等它重传,后续的都得等。
- QUIC 支持 独立流(streams),丢一个包不影响其他流,彻底解决队头阻塞问题。
- 内建 TLS 1.3
- 安全性强,不允许明文传输。
- 与 HTTP/2 类似,但QUIC 直接把加密集成进协议层,更高效也更安全。
- 新的头部压缩机制 QPACK
- HTTP/2 使用的是 HPACK,有“阻塞风险”。
- HTTP/3 使用 QPACK,避免了这种阻塞问题。
HTTP/3 的部署现状
- 浏览器支持:
- Chrome、Edge、Firefox、Safari 均已支持
- 服务器支持:
- Cloudflare、Google、Facebook、nginx(使用 quiche 模块)等都支持
- 网络环境:
- 由于基于 UDP,有些老旧网络环境(如公司内网、部分防火墙)可能不支持。