为什么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 connections
和Reuse connections to servers
确认这一点:如果它然后像往常一样慢(或更慢),则可以通过保持连接活动来获益。