6 月 6 日,IETF QUIC(Internet Engineering Task Force,互联网工程任务组,简称 IETF)、比利时的 HTTP 工作组成员 Robin Mark 在 Twitter 上宣布“历时 5 年,HTTP/3 终于被标准化为 RFC 9114。将与 RFC 9204(QPACK header 压缩)和 RFC 9218 (可扩展的优先级)一起开启 Web 的新篇章!”,这意味着该协议已经进入了稳定的状态,而 HTTP/3 是 HTTP 超文本传输协议的第三个主要版本。
同时 HTTP/2 也更新为新的 RFC 9113 标准。
基于 QUIC 的 HTTP/3
据官方介绍,HTTP/3 是基于 QUIC 的,那么,QUIC 究竟是什么?
正如 IEFT 在简介中写道:
QUIC 传输协议具有 HTTP 传输所需的几个特性,例如多路复用、流量控制、每个流的流控制和低延迟连接建立。
简单来看,QUIC 是一个通用的传输层网络协议,是由 Google 在 2012 年实现并部署,最后在 2013 年向公众公开发布。之所以开发 QUIC,Google 的初衷是解决传输控制协议(TCP)需要几次来回才能建立连接并开始传输数据的事实。原有的协议产生的连接和传输延迟时间较长,带来了较差的用户体验。QUIC 改为使用用户数据报协议 (UDP) 来传输流量。UDP 减少了客户端和服务器之间的往返次数,因此可以加快传输速度,这一点在移动网络上非常重要。
当前,业界已经陆续有不少公司用上了 QUIC 协议。其中,谷歌就非常喜欢 QUIC,以至于在 2020 年其将 QUIC 应用到了 Chrome 浏览器中,并在 Google 服务器所有的连接中,有一半以上使用了 QUIC。
此外,Cloudflare 在 2018 年也将 QUIC 作为网络协议选项。微软也非常喜欢 QUIC,它不仅创建了自己的版本,还将其开源出来(https://techcommunity.microsoft.com/t5/networking-blog/msquic-is-open-source/ba-p/1345441)。NGINX 增加了 HTTP/3 支持。
为什么放着大流行的 HTTP/2 不用,而选择 HTTP/3?
虽然 HTTP/3 作为新一代超文本传输协议,要比第二代更为先进一些,但 HTTP/2 在 2015 年才被标准化,且据 Cloudflare 数据显示,HTTP/2 仍然是应用最为广泛的 HTTP 版本,排在第二的 HTTP/3 流行度要比 HTTP/2 差了很多。那么,IETF 为什么如此紧急地推出了 HTTP/3 来代替?
对此,HTTP 工作组成员 Robin Mark 专门写了一篇稿件解释道,「一开始我们并不需要一个新的 HTTP 版本,而是要让底层传输控制协议(TCP)实现升级」。
其表示,几十年来,TCP 作为网络基石,是互联网上使用和部署最广泛的协议之一,但是在互联网早期就已经出现的 TCP 并没有真正考虑到最大效率的问题。相较之下,新传输协议 QUIC 便被众人赋予期望。
然而,如果把 QUIC 直接运行在 HTTP/2 上有一定难度,因为其在很多特性上与 TCP 有着很大的不同。于是,HTTP 工作组便在几个关键领域进行了调整,使其与 QUIC 兼容。这个调整后的版本最终被命名为 HTTP / 3,之所以如此命名,主要原因是出于营销和方便用户更加清晰地识别出来区别。
简单来看,HTTP/3 本身就是对 HTTP/2 相对较小的改编,以使其与新的 QUIC 协议兼容。因此,HTTP/1.1 和 HTTP/2 之间的差异要比 HTTP/2 和 HTTP/3 之间的差异要大得多。
这样一来,HTTP/3 也被很多人诟病,如 Apache 推迟了将协议添加到其 Web 服务器,它认为自己的 HTTPD 做得很好。也有部分隐私倡导者担心 QUIC,他们发现 QUIC 承诺的速度提升难以捉摸。
不过,无论如何,HTTP/3 进入标准化,也是 HTTP 发展历程中重要的一个里程碑事件。如果你对 HTTP/3 也感兴趣,不妨通过官方介绍了解更多内容:https://www.rfc-editor.org/info/rfc9114
参考:
https://www.theregister.com/2022/06/07/http3_rfc_9114_published/
https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/