¿Los navegadores crean nuevas conexiones TCP para cada solicitud HTTP?

23

Así que sé que HTTP es básicamente un protocolo de texto sobre TCP, y que TCP está basado en estado / conexión. Eso significa que el navegador tiene que conectarse a través de TCP a un servidor antes de hacer una solicitud HTTP. Pregunta entonces: ¿los navegadores suelen crear una nueva conexión TCP para cada solicitud HTTP?

Los navegadores podrían simplemente abrir una solicitud TCP y mantenerla activa mientras el usuario todavía esté navegando en ese servidor, pero luego los servidores tendrían que usar una gran cantidad de conexiones máximas para manejar eso. Pero, de nuevo, si los navegadores crean una conexión para cada solicitud y el usuario navega mucho en el mismo servidor, eso parecería un desperdicio. ¿Cómo suele funcionar? Tal vez a través del uso de un temporizador?

Xeon06
fuente

Respuestas:

30

En HTTP / 0.9 (ya no se usa), cada solicitud usaba una conexión TCP separada, y el final de una respuesta se señalaba al cerrar la conexión.

En HTTP / 1.0, las conexiones separadas siguen siendo el valor predeterminado oficial. Sin embargo, Connection: Keep-Alivese puede usar un encabezado de solicitud " " no oficial pero ampliamente compatible para solicitar una conexión persistente si el servidor lo admite.

En HTTP / 1.1, las conexiones persistentes se convirtieron en el valor predeterminado y el antiguo comportamiento de solicitud única debe solicitarse explícitamente. Por lo general, se utilizan conexiones persistentes múltiples (2–5).

(Opcionalmente, las solicitudes pueden canalizarse , aunque resultó ser difícil de implementar y crea más problemas de los que resuelve (bloqueo de cabecera, etc.), por lo que nadie usa la canalización HTTP / 1.x).

HTTP / 2 (también conocido como SPDY ) fue diseñado específicamente para multiplexar muchas solicitudes al mismo tiempo. Tiene una capa de encuadre / empaquetado que permite que las respuestas lleguen en cualquier orden e incluso simultáneamente.

Recursos: artículo de Wikipedia y RFC 2616 sección 8.1 .

Gravedad
fuente
Otro artículo interesante que menciona el mismo developer.mozilla.org/en-US/docs/Web/HTTP/…
Ganesh Satpute
6

Hay un encabezado "Connection: Keep-Alive". Ver enwiki para más detalles.

Puede usar Wireshark para capturar y analizar conexiones y ver todos los encabezados.

Vi.
fuente
¿Por qué Wireshark en lugar de Fiddler?
Pacerier
3
Fiddler es 1. No es un software de código abierto; 2. Solo para Windows.
Vi.