如何在Chrome或Chromium中禁用HTTP/2?

33

我正在尝试调试HTTP/1.1和HTTP/2之间的差异。 在Chrome或Chromium中是否有禁用HTTP/2的可能性? 我在Chrome 56中没有找到此选项标志。 我尝试了带有标志--disable-http2的Chromium 58:

./Chromium.app/Contents/MacOS/Chromium --disable-http2

使用此标志后,内容仍然使用HTTP/2协议进行交付:

Chromium --disable-http2


2
你在运行这个标志之前,是否已经关闭了所有的会话?当你实际运行时,CLI 的输出是什么? - Erik L
4个回答

28

值得一提的是,该标志位有效。

问题在于,您需要退出Chrome中的所有内容才能使其生效。包括插件shim、其他Chrome选项卡等等。

仅添加命令行开关是不够的。


1
因为我正在运行Chrome实例,所以Chromium中的标志没有起作用。关闭Chrome并使用标志重新运行Chromium即可解决该问题。 - Everettss
3
如果您指定了不同的 --user-profile-dir,它也可以正常工作。 - Riking
2
不仅仅是插件的垫片和选项卡,还有 Chrome 应用程序! - bluehallu
您的回答是只针对 disable-http2 还是所有标志都适用? - Everettss
1
一些标志,我不确定是否所有标志都需要这样做,您需要逐个测试。 - Sam Saffron

4
一个更简单的实现类似功能的方法是使用HTTP代理,如https://www.telerik.com/fiddler。这对请求的额外时间影响微乎其微,并且(据我所知)完全不支持http/2;即使它支持,我相信切换行为也比重启所有Chrome窗口更容易/实用。
这种方法的优点是立即生效 - 禁用和重新启用HTTP/2变得非常容易,只需要启动和停止代理,而无需打扰您打开的(如果您像我一样)数十个Chrome标签页,例如StackOverflow等。 :)

3

0

我曾经看到过相同的问题,由于代理模式和流模式下运行的防火墙而导致。

防火墙会缓冲整个文件,这样就可以扫描它,然后传递它,而不是扫描单个数据包。

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网络瀑布图中,所有下载都并行进行,没有任何阻塞或停顿。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接