如何限制 Chrome 中的并发(并行)浏览器请求?

Cod*_*ode 6 proxy selenium google-chrome chromium selenium-chromedriver

背景

我注意到几乎所有的代理提供程序都允许“最大线程数”的概念,根据我的理解,这意味着一次并发/并行浏览器请求的最大数量。由于现代网站可以有许多并行请求,我如何在 Chrome 中限制并行请求(全局针对整个浏览器,不仅针对每个主机/服务器,而且针对所有这些请求的组合)?

例子

网站 A 从自己的域中获取资源,此外还使用了 9 个 CDN 和 10 个跟踪器。假设 Chrome 有最多 6 个并发请求/域,所以这是 120 个并发请求。高于此的任何事情都必须等待轮到它。例如,我想将其限制为最多 10 个。

笔记

我已经看到在 Firefox 中可以使用“ network.http.max-connections ”来完成,但我没有找到适用于 Chrome 或 Chromium 的任何东西。

如果有帮助,我正在使用 Selenium 和 ChromeDriver (C#) 来启动浏览器。

Asm*_*oun 5

经过一番挖掘和搜索后,我发现对于 Chromium,许多网络调整参数都在ClientSocketPoolManager 检查行中:29 和 46,所以我认为你需要使用你喜欢的参数重建你自己的自定义 Chrome,而不是能够动态调整它们。


Deb*_*anB 0

浏览器连接限制

浏览器限制同一域名的HTTP连接数。此限制在HTTP 规范 (RFC2616)中定义。大多数现代浏览器允许每个域有六个连接。大多数旧版浏览器只允许每个域有两个连接。


HTTP/1.1 RFC

HTTP/1.1 RFC 的第 8.1.4 节提到:

使用持久连接的客户端应该限制它们与给定服务器保持的同时连接的数量。单用户客户端不应与任何服务器或代理保持超过 2 个连接。代理应该使用最多 2*N 个到另一个服务器或代理的连接,其中 N 是同时活动用户的数量。这些准则旨在缩短 HTTP 响应时间并避免拥塞。

现代浏览器的限制较少,允许更多的连接。RFC 没有指定如何防止超出限制。可以阻止连接打开,也可以关闭现有连接。


当前浏览器的设置

Steve Souders 在他的文章Roundup on Parallel Connections中提供了当前浏览器支持的 HTTP/1.1 和 HTTP/1.0 每台服务器的连接数,如下所示:

Browser                 HTTP/1.1    HTTP/1.0
IE 6,7                  2           4
IE 8                    6           6
Firefox 2               2           8
Firefox 3               6           6
Safari 3,4              4           4
Chrome 1,2              6           ?
Chrome 3                4           4
Chrome 4+               6           ?
iPhone 2                4           ?
iPhone 3                6           ?
iPhone 4                4           ?
Opera 9.63,10.00alpha   4           4
Opera 10.51+            8           ?
Run Code Online (Sandbox Code Playgroud)

可以重新配置浏览器,调整Windows 注册表中的MaxConnectionsPerServer和设置,分别控制每个主机名的连接数。MaxConnectionsPer1_0ServerHTTP/1.1HTTP/1.0

在 Firefox 中,这些值可以通过 中的network.http.max-connectionsnetwork.http.max-connections-per-server设置来控制about:config

现在,为了匹配 Firefox 的每主机连接限制 15 个, Chromium/Chrome 团队尝试匹配相同的限制,并进行了可配置的每主机连接数的讨论,但最终没有得出任何结论。


结论

当您使用任何 WebDriver 时,相同的标准也适用Web 浏览器变体组合时,相同的标准也适用。Selenium Grid SetupChrome HeadlessFirefox Headless的行为也将相同。


参考

  • 这并没有以最简短的形式回答如何将浏览器的同时连接数限制为 1 的问题。 (2认同)