HTTP3的优化

通过这个图片,我们可以很清楚的看到,HTTP2和HTTP3的传输层是完全不同的协议,HTTP3 的传输层是 UDP 协议。我们知道 UDP 协议是个不可靠的协议,而 TCP 协议是可靠协议,怎样保证可靠的呢,重传。

QUIC协议

在UDP协议之上,新增了 QUIC 协议。我的理解是由于 TCP 协议相对于 UDP 协议控制比较复杂耗时,因此针对 HTTP 应用贴身开发了 QUIC 协议代替 TCP 协议中关于可靠、流量控制的部分。

QUIC协议特性

  • QUIC 协议提供类似于 HTTP2 的流功能
  • QUIC 协议使用流 ID 取代 IP 和端口,这样就能实现连接迁移。例如说从 4G 信号切换到 wifi,下层的 IP 和端口变了,但是由于 QUIC 的流 ID 没有变,这个连接不会变,可以继续使用这个连接。
    然后我们看一下 HTTP3 在 QUIC 上有什么变化呢?HTTP3 由 HTTP2 进化,HTTP2 最大的变化就是基于二进制流的传输。那么到 HTTP3,由于 QUIC 已经管理了流,HTTP3 本身就减负了,将流管理下移 QUIC,而本身就直接调用 QUIC 的接口就可以了。

HTTP3如何工作

  • HTTPS 是类似于 TCP 握手的工作方式,先工作在 HTTP1 上,通过 HTTP1 传递交换得到秘钥,然后切换到 HTTPS 上工作。
  • *HTTP2,HTTP2 也是基于 TLS 的,所以 HTTP2 的工作方式和 HTTPS 也是同样的过程,需要握手建立 TLS 连接,只是 TLS 连接完成后,发送一个 HTTP2 的连接确认消息,确认后,客户端服务器使用 HTTP2 进行连接通讯。
  • 最后让我们看下 HTTP3 如何工作。首先要建立好 HTTP2 连接,然后发送 HTTP2 扩展帧,这个帧包含 IP 和端口,浏览器收到扩展帧,使用该 IP 和端口,使用 QUIC 建立连接,如果成功,断开 HTTP2,升级为 HTTP3。
    这三者,都用 TCP 的握手协议去理解,都是握手,不同的是握手方式不一样。