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

时间:2012-05-03 08:56:40

标签: c# .net httprequest fiddler

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

由于

2 个答案:

答案 0 :(得分:25)

原因是使用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控制设置:

    <system.net>
    <connectionManagement>
        <add address="*" maxconnection="100" />
    </connectionManagement>
</system.net>

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

答案 1 :(得分:11)

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

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