作者:jerry613 | 来源:互联网 | 2022-11-18 20:13
我发现服务工作者存在一个奇特的问题,即使HTTP服务器通过HTTP / 2进行服务,它也显然将通过工作者提供的网络请求降级为HTTP / 1.1。我在ServiceWorkers在H2上服务的所有站点上都发现了这一点。
我在我的网站上找到了它,我认为这是GatsbyJS的问题。显然已经存在一个问题,表明Chromium中存在错误。
这是预期的行为吗?这种情况在哪里?
这是我网站的链接。
1> Barry Pollar..:
这是我不喜欢Service Workers的原因之一- 搞砸了Network标签。Chrome(和Firefox)基本上将其显示为两个请求:
您会看到Web浏览器从Service Worker请求资产,然后Service Worker从Server获取资产。
第一个请求未正确显示。它显示为HTTP / 1.1,并且,当您单击请求时,您不会看到HTTP请求标头。仅第二个请求显示为完整的HTTP请求(HTTP / 2以及完整的请求和响应标头)。如果您查看服务器日志,或者删除服务工作者并查看“网络”选项卡中的“磁盘缓存”负载,它将显示为HTTP / 2。
这有关系吗?可以说不是。Service Worker是浏览器的一部分,虽然我不知道它在低级如何工作的确切细节(并且找不到该位置),但浏览器可能实际上并不是在浏览器和ServiceWorker。实际上,如果它是正确的,那么它就没有正确执行,因为HTTP请求是针对服务器域的,因此已被定向到错误的位置(要成为真实的HTTP,它可能应该指向localhost和服务工作者所使用的端口号下运行)!那么它应该显示除HTTP / 1.1之外的其他内容吗?还是显示最终使用的网络协议(在这种情况下为h2)?也许。
而且,当您处理本地服务器/服务时,HTTP / 1.1和HTTP / 2之间的差异可以忽略不计。HTTP / 2通过高延迟,低带宽连接(客户端到服务器)而不是本地请求进入自身。正如我所说的,ServiceWorker与服务器的连接是通过HTTP / 2请求的。
在许多方面与使用HTTP缓存(磁盘缓存或内存缓存)时相同,浏览器从不显示原始HTTP请求标头-它仅显示:“显示了临时标头”。同样,显示请求的标头(针对该请求的标头或用于已缓存的原始请求的标头)可能会更有用。