通过移动网络的 HTTP/2 浏览器请求一次往返有多少字节?

2024-03-26

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

传统观点认为 14 KB 的压缩文件response与您对网页第一次往返的预期一样多(由于 TCP 慢启动),但在测试时,与该理论类似的计算不会产生类似的结果。

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

  • 第三代蜂窝数据协议 (3G)
  • 200毫秒延迟(400 毫秒RTT)
  • 400Kb/s最大下载带宽
  • 最大上传带宽300Kb/s https://www.opensignal.com/reports/2019/07/usa/mobile-network-experience
  • 0% 丢包率,至少就这个问题而言
  • 基于 TLS 的 HTTP/2
  • Assume 安卓浏览器为客户

最终,我想为应用程序可控制的请求标头的大小设定性能目标;主要是Etag and Cookie。 (我实在无法控制Referer等等,但至少它们在实践中具有已知的最大尺寸。)


您无法完成一次往返 HTTP/2 页面(也无法完成 HTTPS 页面,甚至使用 HTTP/1.1 也几乎无法完成)。

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

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

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

那么,如果第一个响应不是 14KB,那么您真正需要使用多少内存呢?好吧,实际上这是不可能的,因为它很大程度上取决于双方的 TCP 堆栈(以及 TLS 和 HTTP/2 堆栈)。我的建议是不要沉迷于这个数字,只需用尽可能少的数据来交付您的网站即可。特别是,如果您要交付 15KB 或 16KB,请不要担心,因为您不必为了低于这个 14KB 的神奇数字而自杀。

虽然 Cookie 可能很大(但 eTags 通常不会),但它们通常不会超过一两 KB。因此,如果您想在那里节省空间,那么您可能找错了地方 - 或者有一个真正超级优化的网站,其中这些标头是最后优化的地方!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过移动网络的 HTTP/2 浏览器请求一次往返有多少字节? 的相关文章

  • 文件系统和 Memcached 哪个缓存更快/更好?

    我认为我还不清楚 从文件或从 memcached 读取内容更快吗 为什么 Memcached 速度更快 但内存有限 HDD 很大 但 I O 速度比内存慢 你应该把memcached 最热门的东西 and 所有其他人 can go 缓存文件
  • 在 MySQL 中向 BIGINT 列添加索引有帮助吗?

    我有一个包含数百万个条目的表 以及一个包含BIGINT 20 每行的唯一值 它们不是主键 但在某些操作过程中 有数千个SELECTs 在中使用此列WHERE条款 问 向该列添加索引是否有帮助当条目数量增长到数百万时 我知道它适用于文本值 但
  • HTTP 标头中使用的日期/时间格式

    哪个 RFC 描述了现代 HTTP 标头中用于日期 时间的格式 例如 Last Modified 和 If Modified Since 以及如何根据这种格式在 PHP 中生成日期 时间字符串 一些来源指向 RFC 2822 如DateTi
  • 递归和迭代的速度性能 – 为什么它们对于不同的“小”数都以相同的速度运行?

    我正在尝试优化我拥有的代码 为了做到这一点 我编写了这段代码来查看递归与迭代的效果 该代码 计数 到 10 的 n 次方 public Form1 InitializeComponent Stopwatch sw new Stopwatch
  • 在 C# 中的 RESTfull/HTTP 请求中添加标头和发布数据

    我在 C 中发送 POST 请求时遇到问题 似乎我误解了一些 HTTP 基础知识 所以基本上我正在实施 RESTfull 服务client 其工作原理如下 使用用户名 密码发出 POST 请求并获取令牌 在发出其他 GET POST PUT
  • Vagrant 的端口转发不起作用[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在最后遇到了一个小问题入门指南vagrant http vagrantup com docs getting started ports html
  • 如何在我的 gstreamer 中启用 httpsrc 插件?

    我尝试使用以下命令播放通过 http 检索的 mp3 文件或流 gst launch httpsrc location http domain com music mp3 mad osssink 但出现以下错误 ERREUR le pipe
  • 检查 Javascript 中的 URL 是否损坏

    这个问题之前已经发布在 Stack 上 但没有一个具体到我想要理解的内容 检查 URL 是否正确的最简单方法是发送 http Head 请求 但是如何使用它来指定 URL 呢 我在之前的帖子中发现了这一点 function UrlExist
  • 如何在 suave webpart 中设置 Json 响应

    我从 Suave 和 F 开始 我正在尝试在我的 web 部件中传递一个 json 序列化对象以在我的响应中获取它 在 php 中我有这个 player1Key hdegftzj25 gameKey aegfhzkfszl
  • Angular 2/4 存储令牌的位置

    我有一个用于生成令牌的 REST API 我在 Angular 4 客户端中使用它 但问题是在哪里存储该令牌 在互联网上我发现我可以存储在本地存储或cookie中 所以我的问题是 如果存储令牌是本地存储 并且我刚刚从另一个浏览器复制了有效令
  • jquery中元素+ ID vs 只有ID?

    div some id将扫描整个 DOM 中的所有 div some id将直接从 DOM 获取 ID 那么哪个更快呢 div some id or some id See 优化选择器 https learn jquery com perf
  • 检测用户是否位于代理后面

    我试图弄清楚如何检测登录我网站的人是否在代理后面 我读到您可以通过可嵌入对象 Flash 和 Java 检测一个人的真实 IP 地址 但是 我实际上无法找到任何示例或来源 我正在使用 PHP 并且我已经阅读了寻找 SERVER HTTP X
  • 有什么方法可以处理 HTTP/2 Goaway 在 HttpClient java 中收到的 IOException 吗?

    我在应用程序中进行 API 调用 在某个时候它会随机抛出java io IOException 149 222 1 1 553232 GOAWAY received 使用Java 11环境 无论如何要解决此异常而不是迁移到 Http 1 1
  • 创建 JSON 对象并将其转换为 Java 中的 String

    我需要通过 http post 发送一个相当长的 JSON 标头 在Python中是这样的 self body header client self client name clientRevision self client versio
  • 如何将 html 输入到 Flask 中?

    我有这个 html 位
  • 模板化无分支 int 最大/最小函数

    我正在尝试编写一个无分支函数来返回两个整数的 MAX 或 MIN 而不求助于 if 或 使用通常的技术 https stackoverflow com questions 227383 how do i programmatically r
  • 用子矩阵替换 numpy 矩阵元素

    鉴于我有一个索引方阵 例如 idxs np array 1 1 0 1 以及彼此大小相同的方阵数组 不一定与idxs mats array 0 0 0 0 5 1 0 3 1 1 我想替换每个索引idxs对应的矩阵为mats 得到 arra
  • 浮点转换和性能

    我知道在浮点数和整数之间进行转换时可能会出现错误 但是性能如何 请忽略准确性问题 一般来说 如果我对不同算术类型的操作数 即不同的浮点类型 例如 float and double 和浮点 整数类型组合 例如float and int 是否存
  • 将对象数组作为请求中的 url 参数传递

    我需要将一个对象数组 每个对象有 2 个字段 作为 http 请求的 url 中的参数 我该怎么做以及这个链接应该是什么样子 您可以使用您的结构创建一个 xml 即一个对象数组 每个对象都有两个字段 然后将其转换为字符串 如下所示 举个例子
  • 在用户提交的正则表达式中查找捕获组

    我有一个 python 应用程序 需要处理用户提交的正则表达式 出于性能考虑 我想禁止捕获组和反向引用 我的想法是使用另一个正则表达式来验证用户提交的正则表达式不包含任何命名或未命名的组捕获 如下所示 def validate user r

随机推荐

  • 如何在 Flutter 中使用另一个提供程序内部的提供程序

    我想创建一个具有以下功能的应用程序authentication service根据用户角色具有不同的权限和功能 例如消息 所以我创建了一个Provider用于用户和登录管理 另一个用于用户可以看到的消息 现在 我想在用户登录时获取消息 一次
  • 实体框架 - 对唯一索引进行 UPSERT

    我对我的问题进行了一些搜索 但找不到任何真正有帮助的东西 所以我的问题 困境仍然是这样的 我知道 mysql 数据库有一个独特的索引系统 可用于使用以下格式在同一查询中插入 更新 insert into t a b c values 1 1
  • 在 AWS Cognito Oauth2 令牌中包含用户详细信息

    我正在将 AWS cognito 与 NodeJS 后端 API 结合使用 并希望在访问令牌返回中包含用户详细信息 oauth2 令牌用户池客户端应用程序中定义范围的端点 另外如果我使用管理员启动验证API 无法将范围包含在返回访问令牌中
  • Pandas date_range - 减去 numpy timedelta 给出奇怪的结果,时间变得不是 0:00:00

    我正在尝试使用 pandas date range 功能生成一组日期 然后我想迭代这个范围并从每个日期中减去几个月 确切的月份数在循环中确定 以获得新的日期 当我这样做时 我得到了一些非常奇怪的结果 MVP get date range d
  • 如何从 int 转换为泛型 Integer?

    我对 Java 比较陌生 并且习惯了 C 中的泛型 因此在处理这段代码时遇到了一些困难 基本上 我想要一个通用方法来通过按键获取存储的 Android 首选项 并且此代码虽然丑陋 但适用于布尔值 但不适用于整数 当它因 ClassCastE
  • 如何使用 Postman 查询 Exchange EWS?

    使用Postman 如何查询本地 Exchange 2016 EWS 我有 EWS 的组织 URLhttps my organization net EWS Exchange asmx 我们使用的是 Exchange 2016 没有 Off
  • 在项目之间共享自定义 PHP 代码的最佳方式

    我正在开发一个分布式环境 主要是使用 PHP 我的很多项目共享一些相同的代码 例如我的日志代码 基于 log4php 但添加了一些自定义内容 我可以在每个项目中复制粘贴此代码 但自然地 如果我更改其中的任何内容 我需要将其重新粘贴到各处并
  • 尝试创造。初始化并格式化VHD磁盘

    一些背景 我在实验室环境中工作 遇到了许多问题 需要创建 VHD 并将其附加到虚拟机以进行压力测试 我想出了一个脚本 允许用户使过程尽可能简单 如下 vms Get VM val 0 Write Host This script is se
  • 计算月份统计数据

    我有一个捐款表 我试图计算每个月的总金额 几个月没有任何捐款 我希望结果返回 0 这是我当前的查询 Donation calculate sum amount conditions gt created at gt Time now pre
  • 从服务器端应用程序向客户端推送消息?

    我有一个基于 javascript 的客户端 当前正在轮询 NET Web 服务以获取新内容 虽然轮询有效 我对这种方法不满意 因为我正在使用系统资源并在没有接收任何更改时产生开销 我的问题是如何通知我的客户有新内容可供显示 我对实施此解决
  • 使用处理的二次曲线上的点 (p5.js)

    我使用这个公式来计算二次曲线上的点 cPx2 1 t 1 t x1 2 1 t t qcX t t x2 cPy2 1 t 1 t y1 2 1 t t qcY t t y2 当我设置 t 10 并迭代曲线时 我得到 看起来它不仅获得了曲线
  • Windows 上尝试 python 多处理时出现运行时错误

    我正在 Windows 机器上使用线程和多处理来尝试我的第一个正式的 python 程序 但我无法启动进程 Python 给出以下消息 问题是 我没有在main模块 线程在类内的单独模块中处理 EDIT 顺便说一句 这段代码在 ubuntu
  • 无法使用 jQuery 委托滚动事件

    我正在尝试使用 jQuery 在特定类别的元素上触发滚动事件 如下所示 body on scroll overflow function do stuff 然而 do stuff永远不会发生 我做了一些实验 看起来好像滚动事件不能使用 on
  • 禁用 select2 清除时打开下拉菜单

    似乎 select2 4 在清除当前所选项目时默认打开下拉列表 select2 的早期版本似乎没有这种行为 我正在尝试实现它 但目前还没有运气 有谁知道如何挂钩清除事件 以便我们可以禁用它的默认行为并清除所选选项而不打开下拉列表 干杯 铝
  • 了解 Objdump 中反汇编的二进制文件 - 输出中的字段是什么

    当我使用命令 arm linux gnueabihf objdump d a out 反汇编一个简单的 ARM 二进制文件时 得到以下输出 00008480 lt start gt 8480 f04f 0b00 mov w fp 0 848
  • 返回具有 ModelState 错误的键列表

    如何返回所有有错误的键的列表 数组 我尝试执行以下操作 但它说由于某种原因我无法进行这种表达 ModelState ToList item gt item Value Errors Count gt 0 var errors from mo
  • 小书签中的 XmlHttpRequest 在 GET 上返回空响应文本?

    我正在尝试为我们构建的特殊 URL 缩短服务构建一个 javascript 书签http esv to http esv to用于缩短经文参考文献 即 马太福音 5 章 变为 http esv to Mt5 http esv to Mt5
  • Django 多列唯一约束批量插入

    假设我们有一个模型 from django db import models class Concept models Model a models CharField max length 255 b models CharField m
  • 应该以什么顺序向绝对初学者解释 Python 概念? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过移动网络的 HTTP/2 浏览器请求一次往返有多少字节?

    我正在开发一个网站 目标是尽可能快 这个目标需要让移动客户端发出初始 HTTP 请求one往返 HTTP 2 的 HPACK 应该处理同一页面的后续请求 传统观点认为 14 KB 的压缩文件response与您对网页第一次往返的预期一样多