Вопрос по c#, .net – Почему запрос Http с Fiddler так быстро

16

Я написал многопоточную программу на c #, которая сканирует веб-сайт, но когда я запустил Fiddler в фоновом режиме, запрос выполнялся в 12 раз быстрее, для меня это действительно странно, и когда я закрываю Fiddler, скорость загрузки замедляется. как это возможно, пожалуйста, помогите, (нет никакой настройки прокси для моего подключения к ineternet и для Fiddler тоже) Если я могу повысить производительность fiddler в моем приложении, было бы замечательно, любое решение? Есть ли какая-то магия за кулисами? :)

Спасибо

Ваш Ответ

2   ответа
11

чтобы люди могли это подтвердить? В противном случае это станет диким предположением.

Мое лучшее предположение: скрипачиспользует keepalive что избавит от необходимости открывать соединение снова и снова. Вы можете подтвердить это, отключив обаReuse client connections а такжеReuse connections to serversесли оно будет таким же медленным, как обычно (или медленнее), то выигрыш будет получен благодаря поддержанию связи.

В моей программе, когда я создаю соединение и загружаю контент, я закрываю ответ и окончательно отменяю запрос, но мне интересно, что это тот же код, который работает с fiddler в фоновом режиме и работает быстро. Fiddler меняет мой запрос и использует одно и то же соединение для каждого запроса? Ehsan
@Eshan, не перерабатывая клиента и позволяяKeepAlive.
Это правильный ответ. Ваше клиентское приложение, вероятно, разрывает свое соединение при каждом запросе, но Fiddler поддерживает свои соединения с сервером живыми. Ваше приложение устанавливает новое соединение с Fiddler для каждого запроса, но поскольку это локальный запрос, он в основном мгновенный. Вам необходимо включить свойство KeepAlive в HTTPWebRequest в клиентском приложении.
@Eshan"Does Fiddler change my request and use the same connection for each request?" Да.
так как я могу использовать эту функцию в моей программе с HttpWebRequest? Ehsan
25

которое игнорируется при использовании Fiddler.

Я столкнулся с тем же поведением при использованииSystem.Net.Http.HttpClient выполнить несколько (~ 80) одновременных запросов. С запущенным Fiddler все запросы выполнялись намного быстрее. Keep-alive был, безусловно, включен.

Я использовал 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 действует как прокси-сервер. Я не нашел много информации о пределе подключения прокси, кромеэта старая статья.

Похожие вопросы