HTTP/2 和 HTTP/3区别
一、最根本的区别:底层传输协议
这是所有差异的源头:
- HTTP/2:应用层协议,仍然跑在传统 TCP 协议 之上
- HTTP/3:全新协议,基于 QUIC,跑在 UDP 协议 之上
TCP 和 UDP 天生特性不同,直接决定了两者在丢包、延迟、网络切换上的表现。
二、全维度详细对比表
表格
| 对比项 | HTTP/2 | HTTP/3(QUIC) | 影响说明 |
|---|---|---|---|
| 底层传输 | TCP(面向连接、可靠传输) | UDP(无连接)+ QUIC 封装 | 决定丢包、重连、防火墙兼容性 |
| 队头阻塞 | ❌ 存在(连接级阻塞) | ✅ 完全解决 | 最大核心差异,下文重点讲 |
| 默认端口 | TCP 443 | UDP 443 | HTTP/3 需要额外放行 UDP 443 |
| 握手延迟 | TCP 三次握手 + TLS 握手(1~2RTT) | QUIC+TLS 深度融合,支持 0-RTT / 1-RTT | 首次访问、重连延迟更低 |
| 连接迁移 | ❌ 不支持(IP / 端口一变,连接断开重连) | ✅ 原生支持(靠「连接 ID」识别,和 IP 无关) | 手机 WiFi ↔ 流量切换体验天差地别 |
| 多路复用 | 单 TCP 连接内多请求流 | 原生 UDP 多路复用,流完全独立 | HTTP/2 流隔离但受 TCP 拖累 |
| 加密策略 | 依赖下层 TLS,明文 TCP + 加密 | 强制全程加密,QUIC 设计就不支持明文 | HTTP/3 安全性底线更高 |
| 请求头压缩 | HPACK | QPACK | QPACK 优化了丢包场景下的压缩异常 |
| 防火墙 / 运营商兼容 | ✅ 全网几乎全放行 | ⚠️ 部分企业网、校园网、老旧防火墙拦截 UDP | 国内部分特殊网络会打不开 HTTP/3 |
| 浏览器兼容 | 极广(现代浏览器全覆盖) | 主流现代浏览器支持,老旧浏览器不支持 | IE 等古董浏览器两者都不支持 |
| 运维复杂度 | 低(只需开 SSL+HTTP2) | 略高(需放行 UDP 443 + 配置 QUIC) | 新版宝塔已简化配置 |
| 弱网 / 抖动网络 | 一般 | 优秀 | 网络不稳、跨境、移动端优势巨大 |
三、核心特性深度解读(重点理解)
1. 队头阻塞(最关键差异)
HTTP/2 的痛点
HTTP/2 实现了单连接多路复用:一个 TCP 连接里同时并发多个网页请求(图片、JS、CSS、接口)。 但 TCP 是串行可靠传输:
如果这个 TCP 连接里某一个数据包丢失,整个连接都会暂停,等待丢包重传,所有请求全部卡住。