如何在 chrome 或 chromium 中禁用 HTTP/2?
How to disable HTTP/2 in chrome or chromium?
我正在尝试调试 HTTP/1.1 和 HTTP/2 之间的差异。
是否有可能在 chrome 或 chromium 中禁用 HTTP/2?
我在 chrome 56 中找不到此选项标志。我已尝试使用 flag --disable-http2
:
的 chromium 58
./Chromium.app/Contents/MacOS/Chromium --disable-http2
但在使用此标志后内容仍使用 HTTP/2 协议传送:
当您尝试在 WebPageTest 中做同样的事情时会发生什么(select Chrome 作为测试代理并在高级设置下的 Chrome 选项卡中添加命令行开关)
这是我刚刚为我的个人网站所做的测试,该标志似乎工作正常(如果您查看响应 headers,您会看到 HTTP/1.1)
就其价值而言,旗帜是有效的。
问题是您需要退出一切 Chrome 才能生效。包括插件垫片和其他 chrome 选项卡等。
仅仅添加命令行开关是不够的。
实现大致等效的更简单方法是使用 HTTP 代理,例如 https://www.telerik.com/fiddler。这为您的请求增加了微不足道的额外时间,并且(据我所知)根本不支持 http/2;即使是这样,我也很确定 easier/practical 切换行为比重新启动所有 Chrome windows.
这种方法的优点是它会立即生效 - 禁用和重新启用 HTTP/2 就像启动和停止代理一样简单,而不会弄乱(如果你像我一样)几十个Chrome 个你打开的标签,到 Whosebug 和其他地方:)
我在代理模式与流模式下看到了防火墙 运行 造成的相同问题。
防火墙会缓冲整个文件,这样它就可以扫描它然后传递它而不是扫描单个数据包。
https://docs.fortinet.com/document/fortigate/6.4.4/administration-guide/721410/inspection-modes
只有在使用 http2 时才会出现此问题,并且可能与未正确处理 http 请求优先级或强制单线程有关。
我们会有一个以低优先级开始的视频请求,该请求会停止然后开始导致其他文件下载延迟。然后在后台有一个 api poler 带着高优先级的请求进来。在一些高优先级请求被阻止后 chrome 将取消低优先级视频。
在其他情况下也会发生这种情况,但视频使我们可以很好地重现它。
https://medium.com/dev-channel/javascript-loading-priorities-in-chrome-57c54cfa6672
https://blog.cloudflare.com/better-http-2-prioritization-for-a-faster-web/
https://blog.cloudflare.com/http-2-prioritization-with-nginx/
https://calendar.perfplanet.com/2018/http2-prioritization/
我们在防火墙上将其重新设置为流模式,问题就消失了。
之后下载全部并行进行,chrome 网络瀑布中没有阻塞或停顿。
我正在尝试调试 HTTP/1.1 和 HTTP/2 之间的差异。
是否有可能在 chrome 或 chromium 中禁用 HTTP/2?
我在 chrome 56 中找不到此选项标志。我已尝试使用 flag --disable-http2
:
./Chromium.app/Contents/MacOS/Chromium --disable-http2
但在使用此标志后内容仍使用 HTTP/2 协议传送:
当您尝试在 WebPageTest 中做同样的事情时会发生什么(select Chrome 作为测试代理并在高级设置下的 Chrome 选项卡中添加命令行开关)
这是我刚刚为我的个人网站所做的测试,该标志似乎工作正常(如果您查看响应 headers,您会看到 HTTP/1.1)
就其价值而言,旗帜是有效的。
问题是您需要退出一切 Chrome 才能生效。包括插件垫片和其他 chrome 选项卡等。
仅仅添加命令行开关是不够的。
实现大致等效的更简单方法是使用 HTTP 代理,例如 https://www.telerik.com/fiddler。这为您的请求增加了微不足道的额外时间,并且(据我所知)根本不支持 http/2;即使是这样,我也很确定 easier/practical 切换行为比重新启动所有 Chrome windows.
这种方法的优点是它会立即生效 - 禁用和重新启用 HTTP/2 就像启动和停止代理一样简单,而不会弄乱(如果你像我一样)几十个Chrome 个你打开的标签,到 Whosebug 和其他地方:)
我在代理模式与流模式下看到了防火墙 运行 造成的相同问题。
防火墙会缓冲整个文件,这样它就可以扫描它然后传递它而不是扫描单个数据包。
https://docs.fortinet.com/document/fortigate/6.4.4/administration-guide/721410/inspection-modes
只有在使用 http2 时才会出现此问题,并且可能与未正确处理 http 请求优先级或强制单线程有关。
我们会有一个以低优先级开始的视频请求,该请求会停止然后开始导致其他文件下载延迟。然后在后台有一个 api poler 带着高优先级的请求进来。在一些高优先级请求被阻止后 chrome 将取消低优先级视频。
在其他情况下也会发生这种情况,但视频使我们可以很好地重现它。
https://medium.com/dev-channel/javascript-loading-priorities-in-chrome-57c54cfa6672 https://blog.cloudflare.com/better-http-2-prioritization-for-a-faster-web/ https://blog.cloudflare.com/http-2-prioritization-with-nginx/ https://calendar.perfplanet.com/2018/http2-prioritization/
我们在防火墙上将其重新设置为流模式,问题就消失了。 之后下载全部并行进行,chrome 网络瀑布中没有阻塞或停顿。