通过移动网络的 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 慢开始),但与该理论类似的计算在测试时不会产生类似的结果。
我的目标连接具有以下特点:
- 第 3 代 蜂窝数据协议 (3G)
- 200 毫秒延迟(400 毫秒 RTT)
- 400Kb/s最大下载带宽
- 300Kb/s maximum upload bandwidth
- 0%丢包,至少对于这个问题的目的来说是这样
- HTTP/2 通过 TLS
- 假设客户端AndroidChrome
最终,我想为 app-controllable 请求 headers 的大小设置性能目标;主要是Etag
和Cookie
。 (我无法真正控制 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 是最后需要优化的地方!
我正在开发一个网站,目标是尽可能快。此目标需要 让移动客户端在 one round-trip 中发出初始 HTTP 请求。 (HTTP/2 的 HPACK 应该处理同一页面的后续请求。)
传统观点认为 14 KB 的压缩 response 与您对网页的第一个 round-trip 期望的一样多(因为 TCP 慢开始),但与该理论类似的计算在测试时不会产生类似的结果。
我的目标连接具有以下特点:
- 第 3 代 蜂窝数据协议 (3G)
- 200 毫秒延迟(400 毫秒 RTT)
- 400Kb/s最大下载带宽
- 300Kb/s maximum upload bandwidth
- 0%丢包,至少对于这个问题的目的来说是这样
- HTTP/2 通过 TLS
- 假设客户端AndroidChrome
最终,我想为 app-controllable 请求 headers 的大小设置性能目标;主要是Etag
和Cookie
。 (我无法真正控制 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 是最后需要优化的地方!