Por qué la solicitud Http con Fiddler es increíblemente rápida

Escribí un programa multiproceso en C# que rastrea un sitio web, pero cuando inicié Fiddler en segundo plano, la solicitud se completó 12 veces más rápido, es realmente extraño para mí y cuando cierro Fiddler, la velocidad de descarga se ralentiza. cómo es posible, por favor ayuda, (no hay una configuración de proxy para mi conexión a Internet y para Fiddler también) Si puedo inyectar el rendimiento de Fiddler en mi aplicación, sería maravilloso, ¿alguna solución? ¿Hay alguna magia detrás de escena? :)

Muchas Gracias

preguntado el 03 de mayo de 12 a las 09:05

2 Respuestas

El motivo es el límite en el número de conexiones http simultáneas que se ignora cuando se usa Fiddler.

Me he encontrado con el mismo comportamiento al usar System.Net.Http.HttpClient para realizar múltiples (~80) solicitudes simultáneas. Con Fiddler ejecutándose, todas las solicitudes se completaban mucho más rápido. Keep-alive ciertamente estaba habilitado.

Usé Wireshark para ver qué estaba pasando y lo primero que noté fue que la forma del tráfico http era diferente. Con Fiddler, las solicitudes se lanzaron todas a la vez y las respuestas también se agruparon muy bien. Sin Fiddler, las solicitudes se intercalaban con las respuestas.

En segundo lugar, tcpview mostró que mi código sin Fiddler abrió solo 2 conexiones tcp al servidor. Con el inicio de Fiddler, el número de conexiones aumentó significativamente. Hubo decenas de ellos de mi aplicación a Fiddler y luego de Fiddler al servidor.

Es bien sabido que el estándar http recomienda que la cantidad de conexiones http no sea mayor a 2 y parece que el límite se implementa como una configuración predeterminada en los clientes http.

En las aplicaciones .NET podemos controlar el límite con ServicePointManager.DefaultConnectionLimit propiedad estática. Como experimento, tenerlo configurado en 100 hizo que las solicitudes se completaran con el mismo tiempo con y sin Fiddler.

La configuración también se puede controlar a través de app.config:

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

Ahora, ¿por qué no se respeta el límite de conexión predeterminado al usar Fiddler? Parece que el límite es diferente cuando un cliente http usa un proxy y Fiddler actúa como un proxy. No encontré mucha información sobre el límite de conexión de proxy además este viejo articulo.

Respondido el 17 de enero de 20 a las 11:01

¿Puedes mostrar algún código de muestra para que la gente pueda confirmar esto? De lo contrario, se convertirá en una suposición salvaje.

Mi mejor conjetura: violinista usa keepalive lo que ahorrará la molestia de abrir la conexión una y otra vez. Puede confirmar esto deshabilitando ambos Reuse client connections y Reuse connections to servers: si entonces es tan lento como de costumbre (o más lento), se obtiene el beneficio de mantener viva la conexión.

respondido 22 nov., 16:13

En mi programa, cuando creo una conexión y descargo el contenido, cierro la respuesta y cancelo la solicitud al final, pero me pregunto si este es el mismo código que se ejecuta con Fiddler en segundo plano y es rápido. ¿Fiddler cambia mi solicitud y usa la misma conexión para cada solicitud? - Ehsan

@Eshan "¿Fiddler cambia mi solicitud y usa la misma conexión para cada solicitud?" Si. - CodeCaster

Entonces, ¿cómo puedo usar esta función en mi programa con HttpWebRequest? - Ehsan

@Eshan al no reciclar al cliente y habilitar Mantener viva. - CodeCaster

Esta es la respuesta correcta. Es probable que su aplicación de cliente esté interrumpiendo su conexión en cada solicitud, pero Fiddler mantiene vivas sus conexiones con el servidor. Su aplicación establece una nueva conexión con Fiddler para cada solicitud, pero debido a que es una solicitud local, es básicamente instantánea. Debe habilitar la propiedad KeepAlive en HTTPWebRequest en la aplicación cliente. - EricLaw

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.