Aclaración del encabezado Keep-Alive

106

Se me pidió que construyera un sitio, y uno de los co-desarrolladores me dijo que tendría que incluir el encabezado Keep-Alive.

Bueno, leí mucho al respecto y todavía tengo preguntas.

msdn ->

La conexión abierta mejora el rendimiento cuando un cliente realiza varias solicitudes de contenido de la página web, porque el servidor puede devolver el contenido de cada solicitud más rápidamente. De lo contrario, el servidor debe abrir una nueva conexión para cada solicitud.

Mirando a

ingrese la descripción de la imagen aquí

  • Cuando el IIS (F) envía keep aliveencabezado ( o usuario envía keep-alive ), quiere decir que ( E, C, B) Guardar una conexión que es sólo para mi sesión?
  • ¿Dónde se guarda esta información ( "esta conexión pertenece a" Royi " )?
  • ¿Significa que nadie más puede usar esa conexión?
  • Si es así, ¿significa que mantener vivo el encabezado reduce el número de usuarios de conexión superpuestos?
  • si es así, ¿durante cuánto tiempo se me guarda la conexión? (en otras palabras, si configuro mantener vivo - "mantener" hasta cuando?)

ps para aquellos que estén interesados:

hacer clic en esta página de muestra devolverá el encabezado de mantener vivo

Royi Namir
fuente
2
Pfff, he visto esto en una conferencia, pero no estoy muy seguro. Pensé que el Keep-Alive estaba solo en el servidor y el usuario. Después de todo, todo lo que hay en el medio ni siquiera debería saber que es HTTP, y mucho menos mirar los encabezados.
Noctua
La declaración citada de MSDN es una tontería. Es el cliente el que tiene que abrir una nueva conexión si no hay Keep-Alive.
Marqués de Lorne
Y si está creando un sitio, no un servidor o cliente web, el encabezado keepalive ya está listo para usted.
Marqués de Lorne

Respuestas:

145

¿Dónde se guarda esta información ("esta conexión es entre la computadora Ay el servidor F")?

Una conexión TCP es reconocida por la IP de origen y el puerto y la IP y el puerto de destino. Su sistema operativo, todos los dispositivos intermedios de sesión y el sistema operativo del servidor reconocerán la conexión mediante esto.

HTTP funciona con solicitud-respuesta: el cliente se conecta al servidor, realiza una solicitud y obtiene una respuesta. Sin Keep-Alive, la conexión a un servidor HTTP se cierra después de cada respuesta. Con HTTP Keep-Alive, mantiene abierta la conexión TCP subyacente hasta que se cumplen ciertos criterios.

Esto permite múltiples pares de solicitud-respuesta a través de una sola conexión TCP, eliminando algunos de los inicios de conexión relativamente lentos de TCP.

Cuando el IIS (F) envía el encabezado de mantener vivo (o el usuario envía el mensaje de mantener vivo), ¿significa que (E, C, B) guarda una conexión?

No. Los enrutadores no necesitan recordar sesiones. De hecho, no es necesario que varios paquetes TCP que pertenecen a la misma sesión TCP pasen por los mismos enrutadores, es decir, que TCP debe administrarlos. Los enrutadores simplemente eligen la mejor ruta IP y envían paquetes. Keep-alive es solo para el cliente, el servidor y cualquier otro dispositivo intermedio de sesión.

que es solo para mi sesión?

¿Significa que nadie más puede usar esa conexión?

Esa es la intención de las conexiones TCP : es una conexión de extremo a extremo destinada solo a esas dos partes.

Si es así, ¿significa que mantener vivo el encabezado reduce el número de usuarios de conexión superpuestos?

Defina "conexiones superpuestas". Consulte Conexión persistente HTTP para conocer algunas ventajas y desventajas, como:

  • Menor uso de CPU y memoria (porque hay menos conexiones abiertas simultáneamente).
  • Habilita la canalización HTTP de solicitudes y respuestas.
  • Reducción de la congestión de la red (menos conexiones TCP).
  • Latencia reducida en solicitudes posteriores (sin protocolo de enlace).

si es así, ¿durante cuánto tiempo se me guarda la conexión? (en otras palabras, si configuro mantener vivo - "mantener" hasta cuando?)

Una respuesta típica de mantener vivo se ve así:

Keep-Alive: timeout=15, max=100

Consulte el encabezado Keep-Alive del Protocolo de transferencia de hipertexto (HTTP), por ejemplo (un borrador para HTTP / 2 donde el encabezado Keep-Alive se explica con más detalle que 2616 y 2086 ):

  • Un host establece el valor del timeoutparámetro en el tiempo que el host permitirá que una conexión inactiva permanezca abierta antes de que se cierre. Una conexión está inactiva si un host no envía ni recibe datos.

  • El maxparámetro indica el número máximo de solicitudes que hará un cliente, o que un servidor permitirá que se realicen en la conexión persistente. Una vez que se haya enviado el número especificado de solicitudes y respuestas, el host que incluyó el parámetro podría cerrar la conexión.

Sin embargo, el servidor es libre de cerrar la conexión después de un tiempo arbitrario o un número de solicitudes (siempre y cuando devuelva la respuesta a la solicitud actual). Cómo se implementa esto depende de su servidor HTTP.

CodeCaster
fuente
Definir "conexiones superpuestas" ----> quiero decir simultáneamente. (y creo que el número de conexiones simultáneas se reducirá porque, como dijiste: "la conexión X está reservada para John porque usa un encabezado de mantener vivo" ... ¿estoy en lo cierto?
Royi Namir
1
Entonces, ¿lo que está diciendo es que si el servidor puede manejar 100 conexiones a la vez, y todas esas conexiones usan Keep-Alive, entonces la conexión 101 se descartará?
Royi Namir
1
@Royi no, no sé cuántas conexiones Keep-Alive hace un navegador con un host determinado y no quise decir que un navegador solo abrirá una. La cantidad de solicitudes realizadas simultáneamente es limitada y varía según el navegador . Me refiero a que si un navegador usa conexiones de mantener vivo, puede en lugar de disparar Nsolicitudes a través de Nconexiones (ya que, de forma predeterminada, la conexión se cierra después de cada respuesta), por ejemplo, disparar Nsolicitudes N / Mo incluso solo Mconexiones, porque puede disparar múltiples solicitudes sobre cada conexión abierta, por lo que puede usar menos.
CodeCaster
1
Lo sé. (:-)) dijiste en tu comentario: un cliente hará menos conexiones simultáneas cuando usa Keep-Alive, disparará las solicitudes en serie, no en paralelo . Simplemente no entiendo cómo se relaciona con keepalive.
Royi Namir
5
E, C, B no guardan sesiones. Esos son enrutadores, no tienen ninguna tabla de sesión y no la necesitan, porque varios paquetes de una misma sesión de cliente a servidor TCP pueden seguir diferentes rutas. La función del enrutador es elegir la mejor ruta de IP y reenviar el paquete en consecuencia, de modo que no suba a la capa de transporte (TCP / UDP), ni vaya a la capa de aplicación para ver el encabezado Keep-Alive. Así que, básicamente keep-alive está explícitamente entre el cliente y el servidor, e implícitamente que permite que los dispositivos conscientes de sesión -por ejemplo abrieron cortafuegos- a esa sesión explícita de cliente a servidor
Amina Kadimi