从 Chrome 中移除 HTTP/2 服务器推送

之前发布的公告起,Chrome 106 以及后续版本中的其他基于 Chromium 的浏览器将默认停用对 HTTP/2 服务器推送的支持。

为什么要移除此内容?

利用 HTTP/2 服务器推送,网站可以主动发送网页所需的资源,而无需等待请求请求。然而,正如 Jake Archibald 之前所介绍的那样,这种模型存在问题,而且性能优势通常很难实现。因此,该功能不多,只有 1.25% 的 HTTP/2 网站采用了该功能

使用 HTTP/2 服务器推送的分析结果不尽相同(ChromeAkamai),没有明显的净性能提升,在许多情况下还会导致性能下降。

许多 HTTP/3 服务器和客户端中都未实现推送,即使规范中包含了推送。对于使用新版 HTTP/3 的大部分网络,推送功能实际上已经停用。在较近的时间内重新运行该分析时,我们发现网站 1.25% 的 HTTP/2 支持降至 0.7%。

HTTP/2 服务器推送的替代方案

103 Early Hints 是一种不易出错的替代方案,具有许多与推送相同的优点,但缺点更少。103 Early Hints 不会向服务器推送资源,而是仅向浏览器发送可从立即请求获益的资源提示这使得浏览器可以自主决定是否需要这些资源,例如 HTTP 缓存中是否已经有这些资源。

预加载关键资源是另一种替代方案,可让网页和浏览器协同工作,在网页加载早期提前加载关键资源。虽然这需要首先发送页面本身,因此不如服务器推送和 Early Hints 快,但它的一个额外优势是不会延迟关键页面资源,这两种解决方案都可能发生这种情况。

总结

网络需要能够进行尝试,并在不使用时舍弃它们。虽然推送的潜力听起来不错,但实际使用起来会比预想的更麻烦。不过,我们从 Push 中学到很多东西,并深入设计了 103 条 Early Hints。现在,是时候完成进度了,远离“推动”了。

致谢

主打图片:Scott Rodgerson 来自 Unsplash 网站