Saltar al contenido principal

Keep Alive

Keep alive (mecanismos de mantenimiento de conexiones) se refiere generalmente a las conexiones de comunicación en una red que no están terminadas pero que se mantienen hasta que el cliente o servidor interrumpe la conexión. La característica clave de mantener las keep alive es el envío de un mensaje sin contenido entre un servidor y un cliente. Con este mensaje, uno de los usuarios de la red (cliente o servidor) puede controlar si la conexión se mantendrá y evitar que se cancele. Si la conexión aún está habilitada, se puede usar para el intercambio de datos.

Las conexiones Keep alive además se denominan HTTP keep-alive, conexiones HTTP persistentes y reutilización de conexiones HTTP. El protocolo HTTP 1.1 soporta keep-alive por defecto, y además usa la canalización HTTP para procesar peticiones en lotes. HTTP 2 amplía el procedimiento de conexiones persistentes con opciones adicionales (por ejemplo, multiplexación).

Información general

La comunicación de red convencional opera de acuerdo a un esquema de solicitud-respuesta. Un cliente solicita datos específicos de un servidor. El servidor responde reconociendo la presencia de los datos o negándolos y emitiendo un código de error. Una vez que los datos están disponibles, el cliente los solicita estableciendo una nueva conexión. Luego, el cliente interpreta los datos y los presenta. Si no está completo, se demandan datos adicionales para completar la visualización. Para esto se usa una nueva conexión y, a veces, se causan datos que no son necesarios (recargo de gastos generales). En el protocolo HTTP 1.0, siempre se define una nueva conexión TCP para cada solicitud. Esto significa que cada petición de un cliente es tratada individualmente por el servidor y, si es viable, contestada individualmente.

Las webs suelen constar de distintos recursos de datos. Por ejemplo, archivos HTML, secuencias de comandos CSS y secuencias de comandos que impactan a las interacciones del usuario. Además se incluyen imágenes o archivos multimedia. Simplemente, HTTP 1.0 requiere una conexión separada para cada archivo, que además debe ser concluido. Este enfoque es concretamente ineficiente para webs más grandes porque la utilización de la red es muy alta (congestión de la red)[1]. Para evitar que muchas conexiones individuales se establecieran y terminaran de nuevo, la administración de la red se amplió por medio de conexiones persistentes y canalizaciones HTTP. Para el protocolo HTTP 1.1, ahora es viable poner en práctica diversos solicitudes y respuestas por conexión, con un mensaje específico de keep-alive que se envía entre el cliente y el servidor para cada conexión y las solicitudes ahora se pueden almacenar en el pipeline

Cómo funciona

La mayoría de los servidores pueden ser configurados para soportar «keep-alive»[2]. Por parte del cliente, los navegadores más utilizados ya son capaces de determinar conexiones persistentes. Esto es, no obstante, una cuestión de configuración en el lado del servidor. Dependiendo de la tecnología y del lenguaje de programación utilizado, los cambios necesarios difieren ligeramente en sintaxis y semántica. Para un servidor Apache, se puede permitir keep-alive en el archivo de configuración «httpd.conf». Tres propiedades son concretamente importantes:[3]

  • KeepAlive: Con esta propiedad, se pueden introducir los valores de encendido y apagado. Para HTTP 1.1, es el valor por defecto.[4]
  • MaxKeepAliveRequests: Esta propiedad establece el máximo de solicitudes posibles por conexión. Un valor entre 50 y 100 suele ser suficiente. A pesar de todo, este valor depende del tamaño del proyecto web o del número de archivos en un portal web.
  • KeepAliveTimeout: Si el servidor no recibe ninguna petición, está inactivo y mantiene la conexión hasta que se cancele. La propiedad timeout limita el tiempo que el servidor debe esperar para una nueva petición. Aproximadamente 10 segundos se consideran ideales, pero el tiempo de espera puede ser mayor para sitios web con mucho tráfico.

Si se introducen las propiedades y valores correspondientes en la configuración del servidor, el servidor Apache envía respuestas a peticiones que disponen el siguiente aspecto:[5].

~$ curl -I https://www.domain.com/file.html
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Date: Thu, 15 Jan 2015 16:45:29 GMT
Content-Length: 1845
Keep-Alive: timeout=10, max=20
Server: Apache/2.4.9 (Unix) PHP/5.6.2

El principio es semejante para todos los servidores. El cliente y el servidor intercambian mensajes muy pequeños, llamados «keep-alive-messages». Permiten al cliente recibir diversos archivos dentro de una conexión. El mensaje de keep alive se transmite usando el encabezado HTTP. Indica al cliente o servidor que se debe mantener la conexión. Cada solicitud se realiza por medio de de una conexión. Sólo una vez que uno de los participantes de la red rompe la conexión, ya no es viable realizar diversos solicitudes y respuestas.

Keep alive por medio de de .HTACCESS

Si el operador de la web no tiene acceso a la configuración del servidor, los cambios además se pueden realizar en el archivo htaccess. El archivo .htaccess sobrescribe la configuración del servidor Apache grabando el siguiente código fuente:

<IfModule mod_headers.c>
Header set Connection keep-alive
</IfModule>

El encabezado de «Keep Alive» se añadirá a cada solicitud. Se recomienda realizar una prueba para comprobar si el servidor implementa el cambio como se desee. A pesar de todo, sólo se pueden hacer definiciones más precisas de los tiempos de espera y de las solicitudes máximas en el archivo de configuración del servidor correspondiente.

Relevancia para la programación

Las conexiones persistentes se proporcionan como estándar en el protocolo HTTP 1.1. El protocolo HTTP 2 amplía este estándar por medio de un método de multiplexación, que optimiza todavía más la transmisión de datos. El uso de estas opciones y en qué medida depende de la infraestructura técnica y del cliente. Esto significa que los protocolos permiten distintos optimizaciones, pero la implementación a veces tiene que tener lugar en el lado del servidor.

Para ciertos proyectos web, las cabeceras Keep-alive son concretamente recomendables. Esto es válido para sitios web con bastantes archivos y un amplio contenido multimedia, así como para tiendas online que dependen de conexiones HTTPS. HTTPS es generalmente intensivo en recursos en la transmisión de archivos porque la conexión está encriptada utilizando SSL (Secure Socket Layer). Añadiendo un encabezado de «keep alive», la velocidad de carga de las webs puede acortarse significativamente porque se evitan por completo las latencias entre las distintos conexiones y sólo existen una conexión que permite diversos peticiones y respuestas que el servidor puede procesar una al mismo tiempo.

Al mismo tiempo, puesto que recursos como la CPU (unidad central de procesamiento) y la memoria son necesarios para determinar nuevas conexiones en la capa TCP/IP (que se encuentra debajo de la capa de aplicación del protocolo HTTP), la CPU además puede ser liberada por la cabecera keep-alive. El PC debe configurar un número significativamente menor de conexiones TCP[6].

EnlacesWeb

R Marketing Digital