Al igual que el Apolo 11, HTTP/1.1 marcó un antes y un después en la tecnología y en nuestra sociedad, que ha evolucionado drásticamente desde entonces. HTTP/2 es una actualización notable del protocolo de red HTTP/1.1, cuya última revisión fue en 1999 y que todavía se usa en prácticamente todas las conexiones en la World Wide Web.
El protocolo HTTP es utilizado hoy en día para necesidades para las que no estaba descrito, pero aun así nos ha hecho llegar muy lejos. Aunque en la actualidad, una web, requiere un promedio de 1.9 MB, con más de 100 recursos necesarios para mostrar la página adecuadamente y en este caso, HTTP/1.1 hace lo que puede. Es por ello que HTTP/2 despega ofreciendo muchas más velocidad, seguridad y escalabilidad para un futuro prometedor.
“Es un pequeño paso para un hombre, pero un gran salto para la humanidad.” - Neil Armstrong
Veamos en detalle las principales características de HTTP/2:
Características principales de HTTP/2
Estructura binaria HTTP/2
HTTP/2 introduce una nueva capa de estructura binaria, con el objetivo de determinar cómo se encapsulan y transmiten los mensajes HTTP entre el usuario y el servidor.
En HTTP/1.1, la respuesta de una llamada HTTP es en texto ‘sin formato’, que contiene tanto las cabeceras ‘headers’ como el contenido ‘content’. En el caso de la nueva versión HTTP/2, la respuesta de una llamada HTTP se divide en 2, quedando la cabecera y el contenido por separado, formando respuestas más pequeñas y codificadas en binario.
Encapsulación HTTP/2: Stream, message y frame
Para comprender el nuevo engranaje de entramado binario que se utiliza en las conexiones entre el usuario y el servidor, es importante familiarizarse con la terminología HTTP/2:
- Stream: El ‘stream’ es el intercambio bidireccional de datos de una conexión HTTP establecida, que puede llevar uno o más ‘messages’.
- Message: El ‘message’ es un conjunto de ‘frames’ que uniendo la secuencia completa forma una solicitud o repuesta HTTP lógica.
- Frame: El ‘frame’ es el patrón de comunicación más pequeño en HTTP/2, cada frame tiene un encabezado para identificar a la secuencia a la que pertenece para después formar un ‘message’ lógico.
Esta encapsulación, se realiza a través de una única conexión TCP (multiplexación HTTP/2), que puede transmitir información de forma bidireccional. Cada ‘stream’ tiene un identificador único con una prioridad de transmisión, que opcionalmente se puede establecer, para unificar los mensajes bidireccionales.
Multiplexación bidireccional HTTP/2
Con HTTP/1.1, el usuario usa múltiples conexiones TCP para hacer múltiples solicitudes paralelas para mejorar el rendimiento. El problema es que solo se puede entregar una respuesta a la vez por conexión.
Con HTTP/2, la nueva estructura binaria, elimina estas limitaciones y permite la multiplexación completa de solicitudes y respuestas, al permitir que el usuario y el servidor dividan un mensaje HTTP en ‘frames’ independientes, intercalándolos y luego los vuelvan a ensamblar en el lado del usuario.
Una conexión por origen con HTTP/2
Con el mecanismo de estructura binaria y multiplexión mencionados anteriormente, HTTP/2 solo requiere una conexión TCP por origen, lo que ofrece numerosos beneficios de rendimiento. No necesita múltiples conexiones TCP para multiplexar secuencias en paralelo, ya que utiliza la estructura binaria que se puede intercalar y priorizar.
Prioridad de transmisión HTTP/2
Mientras que la multiplexación permite enviar múltiples solicitudes simultáneamente, la prioridad de transmisión te permite definir qué respuesta irá primero. Puedes definir la importancia de un ‘stream’ en relación con otros ‘streams’ de la misma conexión a través del peso ‘weight’. Como resultado, puedes optimizar el uso de recursos de CPU, RAM, ancho de banda, entre otros, al mismo tiempo que garantizas la entrega de contenido con prioridad alta prioridad al usuario.
Servidor push HTTP/2
Otra nueva característica importante de HTTP/2 es la capacidad del servidor para enviar múltiples respuestas para una sola solicitud del usuario. Es decir, además de la respuesta a la solicitud original “client request”, el servidor puede enviar recursos adicionales al usuario “push promise” sin que el usuario los haya solicitado explícitamente.
Compresión del header en HTTP/2
Cada transferencia HTTP lleva un conjunto de encabezados que describen el recurso transferido y sus propiedades. En HTTP/1.1, estos metadatos siempre se envían como texto sin formato y se agregan entre 500 y 800 bytes de sobrecarga por transferencia, y algunas veces algo más si se usan cookies HTTP. Para reducir esta sobrecarga y mejorar el rendimiento, HTTP/2 comprime los metadatos del encabezado de solicitud y respuesta utilizando el formato de compresión HPACK que utiliza dos técnicas para cumplir el objetivo.
- Reducir el tamaño de cada transferencia: Permitiendo que los campos del encabezado transmitidos se codifiquen a través de un codificación Huffman.
- Contexto de compresión compartido: Requiere que tanto el usuario como el servidor mantengan y actualicen una lista indexada de los campos de encabezado vistos anteriormente, que luego se usa como referencia para enviar únicamente el campo que debe modificarse.
Conclusión
HTTP/2 hará que tus webs o aplicaciones sean más rápidas, más sencillas y más robustas al permitir deshacerte de muchas de las artimañas para mejorar el flujo HTTP/1.1, abordando estos problemas únicamente dentro de la propia capa de transporte HTTP.
Los objetivos principales de HTTP/2 son reducir la latencia al permitir la multiplexación completa de solicitudes y respuestas, minimizar la sobrecarga del protocolo a través de la compresión eficiente de los campos de encabezado HTTP y agregar soporte para la priorización de solicitudes y el push del servidor.
HTTP/2 no modifica la aplicación semántica de HTTP de ninguna manera. Todos los conceptos básicos, como los métodos HTTP, los códigos de estado, los URI y los campos de encabezado, son los mismos, lo que significa que todas las aplicaciones seguirán funcionando sin problema.
Desde la web http2.pro podrás verificar si la configuración de tu servidor web ya tiene activada la versión HTTP/2.
¿Qué te parecen las nuevas características de HTTP/2? ¿Tu servidor web ya tiene activo HTTP/2?
Fotografía de la NASA, Apollo 11 Image Gallery