我们在应用程序中使用带有 angularJS 的 WebAPI。使用 Chrome 版本 64 我们可以看到使用了 H2/HTTP2 协议,但更新后即 Chrome 67,我们现在可以看到 SPDY。这种变化的原因是什么?如果我们将 Chrome 降级到 64,那么就可以按预期工作。
答案1
造成这一变化的原因是什么?
它是漏洞。
Chrome 版本:59.3047
哪些步骤会重现该问题?(1)访问一个页面(例如 https://www.accuweather.com)导致从内存缓存中提取
观察:命中内存缓存的请求显示“spdy”作为协议 预期:没有这样的声明,因为我们不再在 Chrome 中启用 SPDY。
getProtocol() 在这里 https://cs.chromium.org/chromium/src/content/browser/devtools/protocol/network_handler.cc?l=381&rcl=7569715801917d9c4dd1bdc0182bd38ff3e43cae 如果 was_fetched_via_spdy 标志为真,则返回 SPDY,但该标志有点谎言;它对于 QUIC(已验证)和可能 H2(未看)也是如此。
如果我们无法修复 MemoryCache 响应上的协议注释,我们应该将默认回退更改为“”或“h2”,因为后者最有可能。
...
看起来缓存层中的某个地方标记错误了。我会调查一下。
...
该问题在 69.0.3477.0 中仍然存在,并且也适用于磁盘缓存资源。
...
我在 Chrome 67 中也遇到了这个问题。似乎不仅磁盘缓存和内存缓存资源都显示为“SPDY”。我已经禁用了缓存。
https://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/PYCV9EuYers
来源704146 - DevTools 网络选项卡显示内存缓存资源的 SPDY - chromium - Monorail
在 Chrome 67 中,检查器的网络选项卡中显示的 HTTP 协议似乎不正确。当我的网站加载 HTTP2 资源时,网络面板显示它正在使用 SPDY。当我复制相同的资源网址并在新选项卡中打开它时,网络面板显示它正在使用 HTTP2。此外,在 Chrome 66 中,这两种情况都显示为 HTTP2。