ServiceWorker 提供的请求从 HTTP/2 降级为 HTTP/1.1

2023-11-26

我发现 Service Worker 存在一个特殊问题,即使 HTTP 服务器通过 HTTP/2 提供服务,它显然也会将通过 Worker 提供的网络请求降级为 HTTP/1.1。我在所有使用 ServiceWorkers 在 H2 上提供服务的网站上都发现了这一点。

我在我的网站上发现了这个,我认为这是 GatsbyJS 的问题。 显然有已经有一个问题悬而未决这表明 Chromium 中存在错误。

这是预期的行为吗?这是哪里指定的?

这里有一个link到我的网站。


这是我不喜欢 Service Workers 的原因之一 -它弄乱了“网络”选项卡。 Chrome(和 Firefox)基本上将其显示为两个请求:

Double Requests for Service Worker Requests

您会看到 Web 浏览器向 Service Worker 请求资产,然后 Service Worker 从服务器获取资产。

第一个请求未正确显示。它显示为 HTTP/1.1,而且当您单击请求时,您看不到 HTTP 请求标头。只有第二个请求显示为完整的 HTTP 请求(HTTP/2 以及完整的请求和响应标头)。如果您查看服务器日志,或者删除 Service Worker 并查看“网络”选项卡中的磁盘缓存负载,它将显示为 HTTP/2。

这有关系吗?可以说不是。 Service Worker 是浏​​览器的一部分,虽然我不知道它在低级别上如何工作的确切细节(并且找不到指定的位置),但浏览器可能并没有真正在浏览器和浏览器之间进行 HTTP 通信。服务工作者。事实上,如果是的话,那么它的做法就不正确,因为 HTTP 请求是针对服务器域的,因此已被定向到错误的位置(要成为真正的 HTTP,它可能应该指向 localhost 和服务工作线程所在的端口号)跑下)!那么它应该显示 HTTP/1.1 以外的其他内容吗?或者显示使用的最终网络协议(在本例中为 h2)?或许。

当您处理本地服务器/服务时,HTTP/1.1 和 HTTP/2 之间的差异可以忽略不计。 HTTP/2 在高延迟、低带宽连接(客户端到服务器)上发挥作用,不适用于本地请求。正如我所说,ServiceWorker 到服务器的连接是通过 HTTP/2 请求的。

在许多方面与使用 HTTP 缓存(磁盘缓存或内存缓存)时相同,浏览器从不显示原始 HTTP 请求标头 - 它只是显示:“显示临时标头”。同样,显示请求的标头(无论是为该请求请求的标头,还是用于缓存的原始请求的标头)可能会更有帮助。

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

ServiceWorker 提供的请求从 HTTP/2 降级为 HTTP/1.1 的相关文章

  • Service Worker 不会缓存 Manifest start_url

    我正在使用 Lighthouse 来审核我的网络应用程序 我正在克服失败 但我坚持这一点 失败 Service Worker 未缓存 Manifest start url In my manifest json I have start u
  • 无后端的 PWA 通知

    我正在使用 Javascript PWA 制作一个待办事项应用程序 待办事项会有提醒 我想向用户发送通知以提醒他们 任务和提醒时间将存储在localStorage中 所以现在我想在没有任何后端的情况下发送通知 我尝试过一些教程 它们都需要后
  • Service Worker js 中的 Fetch() 无法发送请求标头?

    我的代码相同 我正在调用 fetch 但网络和服务器中的请求没有像 cookie 这样的请求标头 我又找到了一篇关于这个的帖子Service Worker 未发送请求标头 https stackoverflow com questions
  • Angular 6 ServiceWorker - index.html 返回响应 404 Not Found

    我已经在我的测试服务器上部署了 PWAhttps www mytestserver me dev pwa https wwww mytestserver me dev pwa 在 dev pwa 文件夹下 该应用程序以 100 PWA 分数
  • Service Worker 即时声明页面的最佳实践

    由于应用程序和用户体验的性质 我目前设置了一名服务工作人员来立即认领该页面 由于此应用程序是从 AppCache 转换过来的 AppCache 为每个用户创建了一个动态清单文件 因此我发现最好的方法是将此清单文件解析为 JSON 数组并将其
  • 未捕获(承诺中)DOMException:超出配额

    我正在尝试查看离线状态演示 https serviceworke rs offline status demo html从下面的链接 我得到 DOMException 超出配额 https serviceworke rs offline s
  • RFC 中关于 HTTP/2 区分大小写的问题似乎存在矛盾

    HTTP 2 的 RFC 中有一些令人困惑的术语 我希望能更清楚一些 根据 RFChttps www rfc editor org rfc rfc7540 section 8 1 2 https www rfc editor org rfc
  • 在浏览器中访问 HTTP/2 预告片

    当前是否有任何浏览器支持在 HTTP 2 响应中访问预告片 例如 最新的 Fetch API 规范提到预告片是通过 Response trailer 公开的 有支持该功能的浏览器吗 您可以在以下位置找到测试用例http wpt fyi fe
  • 渐进式 Web 应用程序的预期启动体验是什么?

    测试渐进式 Web 应用程序 当我在飞行模式下启动应用程序时 我得到了意外的启动 启动体验 Android Chrome 从主屏幕体验启动 我看到一个白色的屏幕 然后是 离线恐龙 的短暂闪烁 然后应用程序成功启动 一切正常 启动时间比我预期
  • Firebase 推送通知在 NuxtJS 中停止工作

    我再次在推送通知方面遇到一些麻烦 几周前相同的代码也有效 昨天我无意中发现推送通知不再起作用 我正在做的和写的一样文档 https firebase google com docs cloud messaging js receive 我使
  • 在client和serviceWorker之间传输数据

    我想尝试在 serviceWorker 中运行 websockets 我编写了注册serviceWorker的代码 if serviceWorker in navigator navigator serviceWorker register
  • 为什么 Service Worker 只能通过 HTTPS 工作?

    根据最初的提案 关于 更喜欢安全来源以获得强大的新功能 http www chromium org Home chromium security prefer secure origins for powerful new features
  • 在 Web Worker 或 Service Worker 中运行 WebSocket - javascript

    我有来自不同站点的 9 个 websocket 连接 用于使用数据更新 DOM 目前 我正在连接所有网络套接字并监听所有网络套接字 并通过函数调用更新数据 我面临的问题是有很多 websocket 连接 并且存在内存和 CPU 使用问题 如
  • 使用 workbox-webpack-plugin 时,预缓存资源使用什么工作箱策略?

    我正在尝试了解工作箱和服务人员 使用workbox webpack plugin和GenerateSW模式时 用于预缓存资源的workbox策略是什么 IE 因为我似乎没有为预缓存资产设置路由 策略 以便服务工作线程更新这些资产的缓存 那么
  • 带有自定义离线页面的 Angular PWA

    在 Angular 8 应用程序中 我想添加一个自定义离线页面 只是一个简单的 html 文件 我已将我的应用程序设置为 PWA 使用 angular pwa并配置了一切 以便它至少在在线时顺利工作 然而 我很难为 PWA 用户提供更新 因
  • Cloudflare Worker 缓存 API 出现问题

    我现在花了无数的时间尝试让缓存 API 来缓存一个简单的请求 我让它在中间工作过一次 但忘记向缓存键添加一些内容 现在它不再工作了 不用说 cache put 没有指定请求是否实际被缓存的返回值并不完全有帮助 我只能进行反复试验 有人可以给
  • 不透明的回复有哪些限制?

    不透明的回应 https fetch spec whatwg org concept filtered response opaque被定义为一部分获取API https fetch spec whatwg org 并表示向远程源发出请求的
  • gRPC(HTTP/2) 比使用 HTTP/2 的 REST 更快吗?

    目标是引入一种性能更好的传输和应用层协议latency and 网络吞吐量 目前 该应用程序使用REST with HTTP 1 1并且我们遇到了很高的延迟 我需要解决这个延迟问题并且我愿意使用gRPC HTTP 2 or 休息 HTTP2
  • 通过 AWS ALB 的 HTTP2 PING 帧(gRPC keepalive ping)

    我正在使用 AWS Application Load Balancer ALB 公开 ASP NET Core gRPC 服务 这些服务在 Fargate 容器中运行并公开不安全的 HTTP 端口 ALB 终止外部 TLS 连接 并根据路由
  • serviceworker 是否可以向 url 请求添加标头

    我有一个网站 我不想让人们创建帐户 它是一个新闻提要 其中每篇新闻文章都进行了分类 我想让人们标记他们感兴趣的类别 以便下次他们访问该网站时 它只显示标记类别的新闻 我将标签保存在 indexedDB 中 据我所知 它可以在服务工作者中使用

随机推荐

  • Python 字符串中出现意外的空字符串

    观察以下交互式会话 In 1 s emptiness In 2 s replace Out 2 e m p t i n e s s In 3 s count Out 3 10 我今天发现了这一点 这对我来说有点困惑和惊讶 我喜欢学习类似 P
  • PHP 类为什么使用 public 关键字?

    为什么要使用关键字声明类属性 变量 或方法 函数 public 如果它们默认是公开的 或者说 他们是吗 用不同的方式表达我的问题是public多余的 我明白private and protected 但为什么要声明public如果班级成员是
  • 如何强制/确保类属性是特定类型?

    如何在 Python 中将类成员变量限制为特定类型 更长的版本 我有一个类 它有几个在类外部设置的成员变量 由于它们的使用方式 它们必须是特定类型 要么是 int 要么是 list 如果这是 C 我只需将它们设为私有并在 set 函数中进行
  • 在同一天蓝色功能应用程序下部署多个功能不起作用

    尝试在同一个azure函数应用服务帐户中部署3个不同类型的函数 CosmosDBTrigger TimerTrigger HttpTrigger 附上文件夹结构以供参考 功能未按预期运行 但在成功部署后抛出错误 收到异常 函数 CopyTo
  • 哈希在Python中做什么?

    我看到了一个代码示例 其中hash函数应用于元组 结果它返回一个负整数 我想知道这个功能是做什么的 谷歌没有帮助 我找到了一个页面 解释了哈希值是如何计算的 但它没有解释为什么我们需要这个函数 哈希是一个固定大小的整数 用于标识特定值 每个
  • 如何让 DIV 滑入和滑出?

    我目前正在学习 jQuery 我想知道当您单击图像边缘时如何使图像滑入 然后再次单击它会滑开 与此类似 http www karenmillen com 如果您看到右侧并单击 就会出现我正在寻找的效果 我认为这将涉及制作一个 div 并给它
  • IPython 中的并行嵌套 for 循环

    我的 python 代码中有一个嵌套的 for 循环 如下所示 results for azimuth in azimuths for zenith in zeniths Do various bits of stuff Eventuall
  • 在Python中有很多点的图中找到两个最远的点

    我需要找到彼此距离最远的两个点 正如屏幕截图所示 我有一个包含另外两个数组的数组 一个用于 X 坐标 一个用于 Y 坐标 确定数据中最长线的最佳方法是什么 通过这样说 我需要选择图中最远的两个点 希望大家能帮忙 以下是一些屏幕截图 可帮助解
  • 在 PHP 中重写派生类中的静态成员

    那么最好的解决方法是什么 解决这个问题的最好方法是升级到 PHP 5 3 其中后期静态绑定可用 如果这不是一个选择
  • FragmentTabHost:没有已知标记为 null 的选项卡

    我在设计器中遇到了这个异常 Exception raised during rendering No tab known for tag null 我和这个人有相同的确切代码 Android FragmentTabHost 没有标签为空的标
  • 如何在Windows Phone 7中应用程序启动时显示不同的页面?

    当应用程序启动时需要显示注册页面 用户注册后 它不应该进入注册页面 而需要进入登录页面 如何实现这一目标 您可以从代码导航到 Windows Phone 应用程序的起始页 从 WMAppManifest 中删除 DefaultTask 条目
  • 3D相机坐标到世界坐标(改变基础?)

    假设我有一个对象相对于相机的 X Y Z 坐标和方向 Rx Ry Rz 另外 我还有这个相机在世界上的坐标U V W和方向Ru Rv Rw 如何将对象的位置 位置和旋转 转换为其在世界中的位置 对我来说 这听起来像是基础的改变 但我还没有找
  • Spring Data JPA 方法对多个字段使用 findBy 并对所有字段使用 Containing 子句是什么

    我有一个名为 Profile 的类及其 JPA 存储库 ProfileRepo 我正在尝试使用 findBy 方法来查找使用名字或中间名或姓氏以及包含子句的名称 public class Profile private String fir
  • Web 扩展:如何使用“browser_style = true”?

    编写 Firefox Web 扩展时 可以对浏览器或页面操作使用默认 css 以便它们的样式与其他浏览器 UI 组件一样 这是通过插入完成的 browser style true 在扩展清单中 风格喜欢panel section foote
  • 如何用动画添加或删除 Android ListView 行

    在 iOS 中 有一个非常简单且强大的工具可以对 UITableView 行的添加和删除进行动画处理 这是 YouTube 视频的剪辑显示默认动画 请注意周围的行如何折叠到已删除的行上 此动画可帮助用户跟踪列表中发生的更改以及数据更改时他们
  • 需要用于 mime 多部分/相关的 node.js 模块 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个可以生成和解析 mime 多部分 相关 http 有效负载的 node js 模块 到目前为止 我已经看到许多模块专注于多部分 表单数
  • 如果我将 MS Office(例如 .docx)或 OpenOffice(例如 .odt)文档放入 git 存储库,该怎么办?

    我放了几个 docx txt and pdf文件到 git 存储库 我可以打开 编辑 保存本地 docx文件 但是 当我将其推送到 github 并将其下载回我的计算机时 Word 抱怨无法打开它 为了存储 docxgithub 上的文件
  • 程序可以计算算法的复杂度吗?

    有没有办法以编程方式计算算法的时间复杂度 例如 我如何计算一个问题的复杂度fibonacci n 功能 的不可判定性停止问题说你甚至无法判断算法是否终止 我非常确定 您通常无法解决算法的复杂性
  • Spring 依赖项注入 Spring TestExecutionListener 不起作用

    如何使用 Spring 依赖注入到我编写的扩展 AbstractTestExecutionListener 的 TestExecutionListener 类中 Spring DI 似乎不适用于 TestExecutionListener
  • ServiceWorker 提供的请求从 HTTP/2 降级为 HTTP/1.1

    我发现 Service Worker 存在一个特殊问题 即使 HTTP 服务器通过 HTTP 2 提供服务 它显然也会将通过 Worker 提供的网络请求降级为 HTTP 1 1 我在所有使用 ServiceWorkers 在 H2 上提供