2011-09-05 19 views
9

Estoy usando Firefox, pero me gustaría saber cómo los navegadores deciden esto en general.¿Bajo qué circunstancias mi navegador intentará reutilizar una conexión TCP para múltiples solicitudes?

Parece que cuando accedo a la misma URL dos veces en un corto período de tiempo, mi navegador intenta volver a utilizar la misma conexión TCP para ambas solicitudes (esto se llama keep-alive). Sin embargo, cuando accedo a dos URL diferentes (pero aún atendido por el mismo servidor), el navegador a veces decide abrir una nueva conexión para cada solicitud. Obviamente, el navegador no usa una política de una conexión por URL.

Lo estoy preguntando porque estoy tratando de implementar un servicio web que utiliza encuestas largas. Me imagino que un usuario podría querer abrir este servicio en varias pestañas en el mismo navegador. Sin embargo, con keep-alive, la segunda solicitud larga de encuesta no se envía hasta que se completa la primera (al menos en Firefox), porque el navegador está tratando de meterlos a ambos en el mismo socket, lo que no esperaba cuando diseñado el servicio. Incluso si el navegador implementa el revestimiento de tuberías, no hay manera de que pueda responder a la segunda solicitud antes de responder a la primera, porque HTTP exige que complete las respuestas en orden.

Respuesta

6

Al usar HTTP/1.1, de forma predeterminada, las conexiones TCP se dejan abiertas para su reutilización. Esto es para un mejor rendimiento que el inicio de una nueva conexión por solicitud. La conexión se puede reutilizar pero la conexión podría cerrarse en cualquier momento por cualquiera de las partes.

Debe leer HTTP1.1 y la parte en conexiones persistentes.

En su caso, ni siquiera está utilizando la canalización de HTTP (no ampliamente compatible) porque la siguiente solicitud se envía después de la respuesta de la primera.

Los navegadores tienen un grupo de conexiones y lo vuelven a utilizar por nombre de host. En términos generales, un navegador no debe reutilizar una sola conexión para múltiples nombres de host, incluso si esos nombres de host realmente se resuelven en la misma dirección IP.

La mayoría de los navegadores permiten al usuario configurar o anular la cantidad de conexiones persistentes por servidor; la mayoría de los navegadores modernos tienen un valor predeterminado de seis. Si Firefox es realmente bloqueando la segunda solicitud porque ya hay una conexión activa, este es un error en Firefox y debe archivarse en su sistema de seguimiento de errores. Pero si existiera tal error, creo que verías muchos sitios rotos.

+0

Aunque le digo a Firefox que envíe una solicitud al servidor por segunda vez, creo que en realidad no envía una solicitud porque quiere esperar a que termine la primera solicitud, para que pueda volver a usar la conexión. Esta es una característica, no un error, ¿correcto? – Mark

+0

Quizás para URL idénticas trate de usar la misma conexión pero para las URL intenta seleccionar otra conexión en el grupo? – Mark

+0

Si su prueba es enviar 2 solicitudes HTTP 'concurrentes' a la misma URL, podría verlas" serializadas "o enviadas a través de 2 conexiones TCP diferentes. PERO usted NO los ve canalizados. Lo que sucederá, ahora depende de la implementación. Por ejemplo. el navegador puede optar por reutilizar una conexión del grupo, o enviar la segunda solicitud a través de una nueva conexión. Ambos enfoques son correctos ya que HTTP es un protocolo 'sin estado'. Si su implementación depende de detalles como estos, entonces en mi humilde opinión hay un defecto en su diseño. Puede ser que deba escribir más sobre lo que quiere lograr. – Cratylus

Cuestiones relacionadas