HTTP/3 是什么?

要深入了解 HTTP/3,那首先要知道什么是 HTTP/3。
如下图所示,HTTP/3 是基于 QUIC 的协议。而 QUIC 协议是 Google 提出的一套开源协议,它基于 UDP 来实现,直接竞争对手是 TCP 协议。
另外,要聊 HTTP/3,HTTP 的发展历程是怎么也绕不过去的,而且可以讲很久。
如果想要详细了解 HTTP 的前世今生与发展历程,可以查看之前的内容《当我谈 HTTP 时,我谈些什么》

https/3

HTTP/3 的优点及不足

今天我们在这里简单说一下 HTTP/3 相比较 HTTP/2 进步的那些点。

回归正题,相比 HTTP/2 而言 HTTP/3 有以下几点提升:

  • HTTP/3 使用 stream 进一步扩展了 HTTP/2 的多路复用。在 HTTP/3 模式下,一般传输多少个文件就会产生对应数量的 stream。当这些文件中的其中一个发生丢包时,你只需要重传丢包文件的对应 stream 即可。

  • HTTP/3 不再是基于 TCP 建立的,而是通过 UDP 建立,在用户空间保证传输的可靠性,相比 TCP,UDP 之上的 QUIC 协议提高了连接建立的速度,降低了延迟。

  • 通过引入 Connection ID,使得 HTTP/3 支持连接迁移以及 NAT 的重绑定。

  • HTTP/3 含有一个包括验证、加密、数据及负载的 built-in 的 TLS 安全机制。

  • 拥塞控制。TCP 是在内核区实现的,而 HTTP/3 将拥塞控制移出了内核,通过用户空间来实现。这样做的好处就是不再需要等待内核更新可以实现很方便的进行快速迭代。

  • 头部压缩。HTTP/2 使用的 HPACK,HTTP/3 更换成了兼容 HPACK 的 QPACK 压缩方案。QPACK 优化了对乱序发送的支持,也优化了压缩率。

没有哪项技术是完美无缺的,更不用说是还在发展中的 HTTP/3 了。

HTTP/3 建立传输用的是 UDP 协议,而在 HTTP/3 出现前 UDP 的通常出现地点是类似《计算机网络》这样的书面理论,即便是实际应用也大多和网络攻击一起出现,这就导致 UDP 的名声不太好。名声差了自然在硬件上的支持也捉襟见肘,大部分互联网服务也就理所当然的对 UDP 的访问进行限制。

现状

HTTP/3 的基础即谷歌多年探索的基于 UDP 的 QUIC 协议。与 TCP 相比,使用 UDP 可以提供更大的灵活性,并且可以使 QUIC 完全于用户空间中实现——对协议实现的更新不像 TCP 那样需要绑定到操作系统更新。使用 QUIC,可以简单地将 HTTP 级别的流映射到 QUIC 流的顶部,从而继承 HTTP/2 的所有优点,而不会产生队头阻塞。HTTP/3 虽仍处于草案状态,但很多用户已经跃跃欲试。

优势

  1. HTTP/3 利用 QUIC 加速 HTTP 请求,QUIC 提供比 TCP 和 TLS 更高的加密和性能
  2. QUIC 是一种默认加密的新传输协议,旨在加快 HTTP 传输速度以及使其更加安全
  3. HTTP/3 基于 UDP,如果数据包丢失,只会中断一个流,而不会中断所有流,提高了同时获取多个对象的性能
  4. 支持 0-RTT,消除服务器的 TLS 确认,使后续连接的启动速度更快
下图表示 HTTP/2 和 HTTP/3 多路复用两个请求时,数据包丢失及其影响
请求及其相关的响应分别为深蓝和浅蓝色)
http2 http3
http2 http3
HTTP/2 多路复用 2 个请求。响应被分解为多个数据包,一旦一个数据包丢失了,两个请求都被阻止。 HTTP/3 复用 2 个请求。虽然浅色的数据包丢失了,但是深色的数据包传输得很好。

探索

在相同丢包率的条件下,HTTP/3 和 HTTP/2 性能测试对比如下
测试环境:服务端(HTTP/3 with cubic & HTTP/2 with bbr)、客户端(cubic)