HTTPS 在 HTTP/3 中是怎么工作的?QUIC 为什么内置 TLS 1.3?
简化版
HTTP/3 运行在 QUIC 之上,而 QUIC 基于 UDP,并且把 TLS 1.3 集成到了协议内部。
在 HTTP/1.1 和 HTTP/2 中,常见链路是 HTTP over TLS over TCP;在 HTTP/3 中,更像是 HTTP/3 over QUIC,QUIC 内部完成加密、握手、密钥更新和流管理。
这样可以减少握手延迟、避免 TCP 层队头阻塞,并把安全能力作为协议默认部分。
详细版
传统 HTTPS:
HTTP/2
TLS
TCP
IP
HTTP/3:
HTTP/3
QUIC with TLS 1.3
UDP
IP
QUIC 不再依赖 TCP 做连接管理,而是在用户态实现可靠传输、多路复用、拥塞控制,并强制加密大部分传输信息。
TLS 1.3 握手被集成进 QUIC 握手中,不再是独立包在 TCP 上跑。
浏览器通常通过 Alt-Svc 或 HTTPS DNS 记录发现服务端支持 HTTP/3。
完整版教学
1. 先对比传统 HTTPS 栈
在 HTTP/1.1 和 HTTP/2 中,HTTPS 通常是:
HTTP -> TLS -> TCP -> IP
TCP 负责可靠有序传输。
TLS 负责加密和身份认证。
HTTP 负责应用语义。
HTTP/3 换了底座,不再使用 TCP,而是使用 QUIC。
HTTP/3 不是把 HTTP/2 简单搬到 UDP 上,而是使用内置 TLS 1.3 的 QUIC 作为传输层。
2. QUIC 为什么内置 TLS 1.3
QUIC 从设计上就要求加密。
它把 TLS 1.3 握手用于:
- 认证服务端身份。
- 协商密钥。
- 保护传输参数。
- 派生不同阶段的加密密钥。
这让 QUIC 没有明文可用的传统 TCP 头部状态,减少中间设备干预。
也避免了先建 TCP 再建 TLS 的两层握手开销。
3. 握手延迟有什么变化
传统首次 HTTPS 可能需要:
TCP 1-RTT + TLS 1-RTT
TLS 1.3 已经减少了 TLS 往返,但 TCP 建连仍然存在。
QUIC 把传输握手和 TLS 握手结合,首次连接通常可以更快完成。
恢复连接时还可能使用 0-RTT,但 0-RTT 有重放风险,不能承载非幂等敏感操作。
4. HTTP/3 如何改善队头阻塞
HTTP/2 在一个 TCP 连接上多路复用多个 stream。
但 TCP 要保证字节流有序。
一旦某个 TCP 包丢失,后面的数据即使属于其他 HTTP stream,也可能被阻塞。
QUIC 在传输层原生支持多 stream。
一个 stream 丢包,通常不会阻塞其他 stream 的数据交付。
这就是 HTTP/3 改善队头阻塞的重要原因。
5. HTTP/3 和 HTTPS 证书
HTTP/3 仍然需要证书验证。
浏览器仍会校验:
- 证书链。
- 域名 SAN。
- 有效期。
- 吊销策略。
- TLS 版本和算法安全性。
区别是 TLS 1.3 不再作为 TCP 上的独立层呈现,而是在 QUIC 连接建立中完成。
所以 HTTPS 的身份认证和加密语义仍在。
| 校验项 | HTTP/2 over TLS | HTTP/3 over QUIC |
|---|---|---|
| 证书链 | 需要 | 需要 |
| 域名 SAN | 需要 | 需要 |
| 加密协议 | TLS over TCP | QUIC 内置 TLS 1.3 |
| 应用协议协商 | ALPN | ALPN 与 QUIC 参数配合 |
6. 部署和发现机制
客户端通常不会凭空知道某站支持 HTTP/3。
常见方式包括:
- 服务端在 HTTP 响应中返回
Alt-Svc。 - DNS HTTPS 记录提供相关信息。
- 浏览器缓存此前发现的 HTTP/3 支持。
示例:
Alt-Svc: h3=":443"; ma=86400
这告诉客户端后续可以尝试使用 HTTP/3 访问同一服务。
7. 常见误区与追问
- 误区:HTTP/3 不需要 HTTPS。 主流 HTTP/3 基于 QUIC,而 QUIC 内置 TLS 1.3,加密是默认要求。
- 误区:QUIC 只是 UDP,所以不可靠。 QUIC 在 UDP 之上自己实现可靠传输、拥塞控制和流管理。
- 误区:HTTP/3 完全没有队头阻塞。 它改善了连接级队头阻塞,但单个 stream 内仍有顺序要求。
- 追问:0-RTT 为什么有风险? 早期数据可能被重放,不适合非幂等操作。
- 追问:HTTP/3 还检查证书吗? 仍然检查,只是 TLS 1.3 集成在 QUIC 握手中。
- 追问:浏览器如何发现 HTTP/3? 常见方式是 Alt-Svc 和 DNS HTTPS 记录。
8. 加强记忆
HTTP/3 的 HTTPS 记成:HTTP/3 坐 QUIC,QUIC 自带 TLS 1.3。
它不是少了安全层,而是把安全层揉进了传输协议里。