HTTP2 para Dummies

En este artículo desgranaremos los essentials que tienes que saber del nuevo protocolo de comunicación HTTP/2, además de recursos interesantes que te permitirán adaptarte a este nueva forma de intercambio de información entre cliente-servidor de una forma más sencilla.

Índice de contenidos

1. Introducción

La creciente tendencia de la cantidad de usuarios que utilizan Internet, y la intención de mejorar el tiempo y rendimiento de los protocolos de intercambio de información entre cliente y servidor web, han llevado a la concepción, después de casi 20 años desde que saliera la versión 1.1 de HTTP, a la nueva versión del protocolo de aplicación: el famoso HTTP/2.

2. ¿Qué es HTTP/2

HTTP/2 es el nuevo protocolo binario de aplicación (OSI), el cual dispone de la misma semántica que su predecesor, la versión HTTP/1.1, lo que quiere decir que tanto los verbos, así como las cabeceras seguirán funcionando de manera transparente.

3. Características principales

Las principales características que hacen que HTTP/2 resulte interesante son:

  • Protocolo binario: A diferencia de su predecesor que estaba basado en texto, HTTP/2 utiliza directamente el lenguaje de las máquinas (binario) para intercambiar la información. Esto hace que sea mucho más sencillo de interpretar, menos propenso a errores, y más rápido.
  • Multiplexación: HTTP/2 utiliza identificadores únicos en las tramas binarias que se envían/reciben con el objetivo de poder aplicar multiplexación en la información y poder gestionar contenidos de distinto tipo con muchos menos recursos.
  • Una única conexión: HTTP/2 es capaz de gestionar el intercambio de información entre cliente-servidor utilizando una única conexión. Esto hace que sea especialmente útil para ahorrar recursos, y agilizar el proceso de intercambio de información.
  • Compresión de cabeceras: HTTP/2 introduce por primera vez la compresión de cabeceras de forma nativa, con el objetivo de intercambiar la menor cantidad de información posible, y poder reducir al máximo la latencia en lo que a cabeceras se refiere.
  • Servicio ‘server push’: HTTP/2 es capaz de realizar push a la cache de los navegadores a través de su conexión binaria de aquellos recursos que el navegador va a necesitar, antes si quiera de que éste haya podido interpretar el HTML de la página que le ha sido servida.

4. ¿Cómo establece una conexión HTTP/2 nuestro navegador?

Tenemos que tener en cuenta que, a pesar de que en la RFC del protocolo HTTP/2 no es obligatorio el uso de cifrado durante la conexión entre cliente-servidor, hay que decir que no existe a día de hoy ningún navegador que soporte HTTP/2 sin cifrado.

Es por ello, por lo que en este artículo se explicará como se realiza la conexión HTTP/2 de la forma más habitual: Utilizando la extensión ALPN (Application-Layer Protocol Negotiation) de TLS (Transport Layer Security), la cual es ya el estándar recomendado de cifrado de la conexión soportado por prácticamente todos los navegadores.

En este sentido, y si disponemos de un navegador que soporte HTTP/2, si accedemos a un site utilizando la conexión cifrada HTTPS, el navegador lanzará una petición “ClientHello” del protocolo TLS1.2, en el que se explicitará en la extensión ALPN que el navegador soporta HTTP2 (Protocolo h2)

Paso 1/2: ClientHello del TLS1.2

Seguidamente, el servidor responderá con el mensaje “ServerHello” del protocolo TLS1.2, en el cuál, aprovechándose de la misma extensión ALPN, se le confirmará al cliente, que el servidor utilizará HTTP/2 para establecer la comunicación (Protocolo h2.)

Paso 2/2: ServerHello del TLS1.2

A partir de aquí, la conexión HTTP/2 se habrá cerrado y el servidor comenzará a enviar tramas de datos binarios al navegador, que será interpretado de forma conveniente.

5. ¿Qué navegadores soportan HTTP/2?

Para conocer qué navegadores soportan HTTP/2, podemos utilizar el siguiente enlace: Navegadores que soportan HTTP2

También podemos consultar directamente la tabla de navegadores en la siguiente imagen extraída de la web anterior:

6. Plugins interesantes

Como herramienta de ayuda a desarrolladores, existen plugins que permiten conocer de primera mano si nuestra conexión está utilizando el protocolo HTTP/2.

En este sentido, el llamado “HTTP/2 and SPDY indicator” plugin, puede sernos de gran ayuda.

7. HTTP/2 y Java

Tenéis que saber que, puesto que HTTP/2 es un protocolo relativamente nuevo (2015), hasta la versión 9 de la JDK de Java no se dispone de soporte nativo para el protocolo ALPN.

Eso quiere decir que, si queremos utilizar conexiones ALPN utilizando JDK 1.8 o inferior, es posible que nos tengamos que apoyar en librerías externas que arranquen con nuestra aplicación, dependiendo del contenedor de servlets o servidor de aplicaciones que utilicemos.

En el siguiente enlace, podemos echar un vistazo rápido a aquellas implementaciones de servidores basadas en Java que actualmente ya soportan el protocolo HTTP/2: Implementaciones de servidores HTTP/2

8. Conclusiones

Con este artículo hemos podido desgranar las características más esenciales que debemos conocer de HTTP/2, pudiendo ser éste un punto de partida para facilitar nuestra labor de desarrollo con este nuevo protocolo y los nuevos contenedores de servlets / servidores de aplicaciones que soportan dicho protocolo.

9. Referencias