背景
我注意到几乎所有的代理提供程序都允许使用“ 最大线程”的概念,据我了解,这意味着一次最多并行/并行浏览器请求。 既然现代网站可以有许多并行请求,那么我如何在Chrome中对并行请求(在整个浏览器中,不仅是针对每个主机/服务器,而且对于所有组合在一起的)全局限制?
示例
网站A正在从其自己的域中获取资源,此外它还使用9个CDN和10个跟踪器。假设Chrome每个域最多有6个并发请求,所以120个并发请求。高于此的任何内容都必须等待。例如,我想限制为最多10个。
注释
我已经看到在Firefox中可以使用“ network.http.max-connections ”来完成,但是我没有找到适合Chrome或Chromium的功能。
我正在使用Selenium和ChromeDriver(C#)启动浏览器,如果有帮助的话。
答案 0 :(得分:2)
经过一番挖掘和搜索后,我发现对于Chromium,许多网络调整参数都位于ClientSocketPoolManager
check lines : 29 and 46中,所以我认为您需要使用首选参数而不是使用自己的自定义Chrome重建能够动态调整它们。
答案 1 :(得分:0)
浏览器限制具有相同域名的HTTP连接的数量。此限制在HTTP specification (RFC2616)中定义。大多数现代浏览器每个域允许六个连接。大多数较旧的浏览器每个域仅允许两个连接。
Section 8.1.4 of the HTTP/1.1 RFC提到:
使用持久性连接的客户端应该限制它们与给定服务器保持的同时连接数。单用户客户端不应与任何服务器或代理保持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 ?
可以通过调整 Windows注册表中的MaxConnectionsPerServer
和MaxConnectionsPer1_0Server
设置来重新配置浏览器,以控制HTTP/1.1
和{ {1}}。
在Firefox中,可以通过HTTP/1.0
中的network.http.max-connections和network.http.max-connections-per-server设置来控制这些值。
现在Match Firefox's per-host connection limit of 15的Chromium / Chrome小组尝试将其匹配,并进行了讨论Configurable connections-per-host,但最终没有任何结论。
使用任何 WebDriver 和 Web浏览器变体组合时,同样的标准也适用。 Selenium Grid Setup , Chrome Headless 和 Firefox Headless 的行为也将相同。