我发现 Service Worker 存在一个特殊问题,即使 HTTP 服务器通过 HTTP/2 提供服务,它显然也会将通过 Worker 提供的网络请求降级为 HTTP/1.1。我在所有使用 ServiceWorkers 在 H2 上提供服务的网站上都发现了这一点。
我在我的网站上发现了这个,我认为这是 GatsbyJS 的问题。
显然有已经有一个问题悬而未决这表明 Chromium 中存在错误。
这是预期的行为吗?这是哪里指定的?
这里有一个link到我的网站。
这是我不喜欢 Service Workers 的原因之一 -它弄乱了“网络”选项卡。 Chrome(和 Firefox)基本上将其显示为两个请求:
您会看到 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(使用前将#替换为@)