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

本文关键字:速度 非常 请求 Http Fiddler 为什么 | 更新日期: 2023-09-27 18:33:05

我用 c# 编写了一个多线程程序来抓取网站,但是当我在后台启动 Fiddler 请求时,完成速度提高了 12 倍,这对我来说真的很奇怪,当我关闭 Fiddler 下载速度变慢时。 怎么可能,请帮忙, (我与 Internet 的连接和 Fiddler 也没有代理设置( 如果我能在我的应用程序中注入小提琴手的性能,那就太好了, 有什么解决办法吗?幕后有什么魔力吗?:)

谢谢

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

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

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

我使用Wireshark来查看正在发生的事情,第一件事我注意到http流量的方式不同。随着提琴手的请求被同时抛出,回复也很好地分组在一起。没有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 确实充当代理时,限制看起来是不同的。除了这篇旧文章之外,我没有找到太多关于代理连接限制的信息。

你能展示一些示例代码,以便人们可以确认这一点吗?否则就会变成胡乱猜测。

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