我发现服务工作者存在一个特殊的问题,即使HTTP服务器通过HTTP / 2服务,该服务工作者显然也会将通过工作者提供的网络请求降级为HTTP / 1.1。我在ServiceWorkers在H2上服务的所有站点上都发现了这一点。
我在我的网站上找到了这个,我认为这是GatsbyJS的问题。 显然有already an issue open表示Chromium中存在错误。
这是预期的行为吗?这种地方在哪里?
这是我网站的link。
答案 0 :(得分:3)
这是我不喜欢Service Workers的原因之一-it messes up the Network tab。 Chrome(和Firefox)基本上将其显示为两个请求:
您看到Web浏览器从Service Worker请求资产,然后Service Worker从服务器获取资产。
第一个请求未正确显示。它显示为HTTP / 1.1,并且当您单击请求时,您也看不到HTTP请求标头。仅第二个请求显示为完整的HTTP请求(HTTP / 2以及完整的请求和响应标头)。如果您查看服务器日志,或者删除服务工作者并查看“网络”选项卡中的“磁盘缓存”负载,它将显示为HTTP / 2。
这有关系吗?可以说不是。 Service Worker是浏览器的一部分,虽然我不知道该底层的确切详细信息(无法找到具体位置),但该浏览器实际上并不是在浏览器和ServiceWorker之间使用HTTP。实际上,如果这样做是不对的,因为HTTP请求是针对服务器域的,因此已被定向到错误的位置(要成为真实的HTTP,它可能应该指向localhost和服务工作者正在运行的端口号下)!那么它应该显示除HTTP / 1.1之外的其他内容吗?还是显示最终使用的网络协议(在这种情况下为h2)?也许。
在处理本地服务器/服务时,HTTP / 1.1和HTTP / 2之间的差异可以忽略不计。 HTTP / 2通过高延迟,低带宽连接(客户端到服务器)而不是本地请求进入自身。正如我所说的,ServiceWorker与服务器的连接是通过HTTP / 2请求的。
在许多方面与使用HTTP高速缓存(磁盘高速缓存或内存高速缓存)时相同,浏览器从不显示原始的HTTP请求标头-它仅显示:“显示了临时标头”。同样,显示请求的标头(该请求的标头或用于缓存的原始请求的标头)可能会更有用。
答案 1 :(得分:0)
我刚刚在 Firefox 90 中也注意到了这种行为.. tbh,我不担心 - Service Worker 缓存的响应存储在客户端计算机本地(不需要远程获取),因此 DevTools 是否显示请求因为 HTTP 1.1 或 2 对性能或功能没有影响。这不是降级。