通过移动网络的 HTTP/2 浏览器请求在一个 round-trip 中有多少字节?

How many bytes in one round-trip for an HTTP/2 browser request over mobile networks?

我正在开发一个网站,目标是尽可能快。此目标需要 让移动客户端在 one round-trip 中发出初始 HTTP 请求。 (HTTP/2 的 HPACK 应该处理同一页面的后续请求。)

传统观点认为 14 KB 的压缩 response 与您对网页的第一个 round-trip 期望的一样多(因为 TCP 慢开始),但与该理论类似的计算在测试时不会产生类似的结果。

我的目标连接具有以下特点:

最终,我想为 app-controllable 请求 headers 的大小设置性能目标;主要是EtagCookie。 (我无法真正控制 Referer 之类的东西,但至少它们在实践中有一个已知的最大尺寸。)

你不能往返 HTTP/2 个页面(HTTPS 页面也不行,甚至 HTTP/1.1 也几乎不可能)。

这是因为 TLS 握手至少需要一次往返(尽管 TLSv1.3 确实有浏览器和服务器通常不支持的 0-RTT 重复握手)。

HTTP/2 需要更多消息,虽然它们不需要知识(因此技术上没有往返)将导致 TCP 确认,因此拥塞 window (CWND)在这种情况下,将增加超过 14Kb。此外,当您开始流式传输第一个响应时,它的 TCP 数据包也将得到确认,从而进一步增加 CWND。

我最近写了一篇关于此的博客 post:https://www.tunetheweb.com/blog/critical-resources-and-the-first-14kb/

如果第一个响应不是 14KB,那么你真的需要玩多少?好吧,这实际上是不可能说的,因为它在很大程度上取决于每一方的 TCP 堆栈(以及 TLS 和 HTTP/2 堆栈)。我的建议是不要沉迷于这个数字,只需以尽可能少的数据提供您的网站。如果您交付的是 15KB 或 16KB,请不要担心,因为您不必为达到这个 14KB 的神奇数字而自杀。

虽然 Cookie 可能很大(尽管 eTag 通常不会),但它们通常不会超过一两个 KB。因此,如果您试图在那里节省 space,那么您可能找错地方了 - 或者拥有一个真正超级优化的网站,其中这些 headers 是最后需要优化的地方!