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.
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
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
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