Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : HTTP/3.0 有了解过吗?它与之前的版本有哪些主要不同?
【简要回答】
- 传输层协议革新:HTTP/3.0 基于 QUIC 协议(UDP),替代 TCP,解决队头阻塞,降低连接延迟。
- 彻底解决队头阻塞:QUIC 直接在传输层实现多路复用,单个流的数据包丢失不影响其他流。
- 头部压缩优化:采用 QPACK 算法,允许乱序传输动态表更新,避免解码阻塞。
- 强制加密与快速握手:默认集成 TLS 1.3,合并 TLS 和 QUIC 握手,支持 0-RTT 连接。
【详细回答】
- 传输层协议革新:QUIC 替代 TCP:
- 核心改进:
HTTP/3.0 弃用了 TCP,而是改用基于 UDP 的 QUIC 协议,解决了 TCP 的队头阻塞和连接延迟问题。 - 技术细节:
① 0-RTT 连接:通过缓存会话密钥,首次连接即可发送数据(类似 TLS 1.3 的 0-RTT)。
② 连接迁移:它使用连接 ID(而非 IP+端口 的格式)来标识连接,进行网络切换(如 Wi-Fi→5G)不需要重新建立连接。
③ 抗丢包优化:QUIC 协议内置前向纠错(FEC)和快速重传机制,减少了重传延迟。 - 对比 HTTP/2.0:
HTTP/2.0 仍依赖 TCP,丢包时所有流被阻塞,而 QUIC 协议在传输层避免此问题。
- 核心改进:
- 彻底解决队头阻塞:
- 核心改进:
QUIC 协议直接在传输层实现多路复用,每个流独立处理,数据包丢失仅影响当前流,不会对其他流造成干扰。 - 技术细节:
① 流的独立性:每个 HTTP/3.0 流拥有独立的数据包序列和拥塞控制,避免全局阻塞。
② 应用场景:视频流、多资源页面加载时性能显著提升(如 YouTube 已部署 HTTP/3.0)。 - 对比 HTTP/2.0:
HTTP/2.0 在应用层实现多路复用,但 TCP 层的丢包仍导致所有流阻塞。
- 核心改进:
- 头部压缩算法升级:QPACK:
- 核心改进:
采用 QPACK 替代 HTTP/2.0 的 HPACK,允许乱序传输动态表更新指令。 - 技术细节:
① 动态表的传输:QPACK 将动态表更新指令与头部块分离,避免因丢包导致解码失败。
② 性能提升:减少头部大小约 5%~10%,尤其在高延迟网络中效果显著。 - 对比 HTTP/2.0:
HPACK 算法要求动态表更新按顺序到达,丢包时解码器需等待重传。
- 核心改进:
- 强制加密和快速握手:
- 核心改进:
QUIC 强制使用 TLS 1.3,合并了加密与连接握手的步骤,减少了延迟。 - 技术细节:
① 1-RTT 握手:首次连接合并 QUIC 和 TLS 握手,仅需 1 个往返。
② 0-RTT 重连:通过会话恢复实现 0 往返延迟,提升用户体验(如移动端页面刷新)。 - 对比 HTTP/2.0:
HTTP/2.0 的 TLS 握手与 TCP 握手分离,通常需 2-RTT(TCP + TLS)。
- 核心改进:
【知识拓展】
- HTTP/2 and HTTP/3 are architecturally different, as the following picture show :
- An image depicts an overview of how these layers relate to one other is following :
- HTTP semantics are the resource metadata attached to requests and responses. They include request header fields and response status codes. HTTP/3 and HTTP/2 semantics are similar in terms of data format and request/response types. However, their arrangement order differs.
- HTTP/2 has a distinct application layer (HTTPS,) an optional security layer (TLS,) and a transport layer (TCP), stacked in that order.
- The layers in HTTP/3 are less distinct, with HTTPS being the application layer, both HTTPS and QUIC forming a built-in security layer, and both QUIC and UDP forming the transport layer.
- Server Push and Prioritization:
- Server push involves servers preemptively sending resources to clients in order to reduce latency. Both HTTP/2 and HTTP/3 support server push. However, in HTTP/3, clients can set the number of acceptable pushes via the push stream ID to reduce wasted bandwidth.