为什么Http请求Fiddler的速度非常快

我在c#中编写了一个用于抓取网站的multithreading程序,但当我在后台启动Fiddler时,请求的速度提高了12倍,这对我来说真的很奇怪,当我关闭Fiddler时,下载速度会降低。 怎么可能请帮助,(我的连接到ineternet和Fiddler也没有代理设置)如果我可以在我的应用程序中注入fiddler的性能,那将是非常好的,任何解决方案? 幕后有什么魔力吗? 🙂

谢谢

原因是使用Fiddler时忽略的http连接数量的限制。

我在使用System.Net.Http.HttpClient执行多个(~80)并发请求时遇到了相同的行为。 随着Fiddler的运行,所有请求都完成得更快。 保持活力当然是有效的。

我使用Wireshark来查看发生了什么,我首先注意到http流量的方式不同。 随着Fiddler的请求被一次性抛出,之后响应也被很好地分组。 没有Fiddler,请求与响应交错。

其次,tcpview显示我没有Fiddler的代码只创建了2个到服务器的tcp连接。 随着Fiddler的开始,连接数量急剧增加。 从我的应用程序到Fiddler,然后从Fiddler到服务器,有数十个。

众所周知,http标准建议http连接的数量不应超过2,并且似乎限制是作为http客户端中的默认设置实现的。

在.NET应用程序中,我们可以使用ServicePointManager.DefaultConnectionLimit静态属性来控制限制。 作为一项实验,将其设置为100使得请求在使用或不使用Fiddler时执行相同的速度。

该设置也可以通过app.config控制:

       

现在,为什么使用Fiddler时不遵守默认连接限制? 当http客户端使用代理并且Fiddler确实充当代理时,结果限制是不同的。 除了这篇旧文章之外,我没有找到有关代理连接限制的更多信息。

你能展示一些示例代码,以便人们可以确认吗? 否则它会变得疯狂猜测。

我最好的猜测:Fiddler 使用keepalive ,这将省去一遍又一遍打开连接的麻烦。 您可以通过禁用Reuse client connectionsReuse connections to servers确认这一点:如果它然后像往常一样慢(或更慢),则可以通过保持连接活动来获益。