En este artículo hablaremos sobre el protocolo HTTP, las novedades con la nueva versión 2.0 y las diferencias entre la versión 1.X y la nueva 2.0.
Además, nos haremos eco de que el pasado 3 de diciembre el famoso servicio CloudFlare activó la opción de usar HTTP2 en sus comunicaciones.
Pero antes, para poder entender mejor la razón de existir de este protocolo, daremos una pequeña explicación sobre HTTP.
¿De dónde viene HTTP?
Tras el nacimiento de Internet, se vio la necesidad de establecer un protocolo de comunicación sencilla. Científicos del CERN (gracias al padre y creador "Tim") crearon entonces un protocolo que combinaba varias tecnologías:
- Documentos de Hipertexto
- Recuperación de la información basada en la red
- El lenguaje Standard Generalized Markup Language (SGML)
Estas tecnologías, bien establecidas, se englobaron en el protocolo HTTP, dando a una forma común en Internet para comunicar sistemas distribuidos.
Ahora vamos a explicar de forma breve el protocolo HTTP.
HTTP
Este protocolo es sin estado, esto significa que cada comunicación entre cliente y servidor no mantiene información. Cómo es habitual mantener cierta información de estado, se han desarrollado estrategias para mantener un estado fuera del protocolo HTTP (Cookies y Sessions).
Además define una nomenclatura para "llamar" a recursos ubicados en la máquina que hace de servidor, de la siguiente forma:
http://[dominio o ip]:[puerto]/[ruta_recurso]?[atributo]
HTTP 2.0
El pasado mes de febrero se publicó la versión 2.0, tras más de 15 años sin actualizarse.
La versión 2, es compatible con el funcionamiento de las versiones 1.1 y 1.0. Manteniendo los mismos códigos de estado (1XX, 2XX, 3XX, 4XX, 5XX), métodos (GET, POST, PUT, HEAD, etc) y la estructura de la cadena de llamada. Las diferencias se enumeran a continuación:
- Cabeceras en formato binario en lugar de formato texto.
- Cabeceras comprimidas, por lo que junto al comprimir el formato binario se reduce la cantidad de información que se transmite en cada petición (mediante HPACK).
- Tecnología server push: Permite cargar los archivos (CSS, JS, imágenes, etc) desde el servidor al cliente sin que éste lo pida. Con HTTP 1.X cuando pedíamos una página, primero se descargaba el HTML, después todos los archivos CSS, JS e imágenes enlazados por éste. Estos archivos a su vez podían hacer referencia a otros y como consecuencia se descargaban en último lugar. Con la tecnología server push de HTTP 2, se pueden enviar todos los archivos necesarios para que se cargue la página desde el principio, sin tener que esperar a que el navegador interprete el HTML.
- Multiplexación: HTTP 1.x tiene un problema llamado "Head-of-line blocking", donde sólo una solicitud es usada por una conexión, llevando a una congestión. La Multiplexación aborda estos problemas al permitir que varias peticiones puedan resolverse a la vez. Esto permite que el cliente solamente necesite utilizar una conexión para cargar una página.
En definitiva, podremos disponer de carga más rápida para todos los recursos de la página.
Conclusión
Para hacer funcionar el protocolo HTTP 2, es necesario que tanto el cliente como el servidor tenga soporte. En el caso de que algunos de los dos no tengan soporte, en la negociación de protocolo, se usarían versiones anteriores.
En el entorno cliente, los navegadores modernos actualizados tienen soporte (Chrome, Firefox, etc). Algunos navegadores que no tienen soporte contarán con ello próximamente.
En el entorno servidores, existen implementaciones oficiales para multitud de entornos (Apache, Dart, Jetti, etc...) que tenéis disponibles aquí. Por otra parte, en los servidores que hacen de intermediario como CloudFire, cada vez más se ofrece soporte para HTTP 2.
Más información | HTTP2