Thursday, May 27, 2021

Algunas pinceladas sobre HTTP/2

Investigando un poco por aquí y por allí acerca de cómo mejorar los tiempos de carga de páginas web o de contenidos obtenidos a través de APIs, me encontré con algunas tecnologías a las cuales su momento de brillar y ser útiles les ha llegado.

En esta ocasión me refiero específicamente a los protocolos gRPC y HTTP/2, los cuales, en ocasiones, vienen tomados de la mano ya que el primero no puede operar sin el segundo, pero como lo contrario no es cierto, me enfocaré en HTTP/2 para este breve escrito. Sobre gRPC hablaré en un próximo artículo.

Como es harto conocido, el protocolo que mueve a la WWW es principalmente el HyperText Transfer Protocol, mejor conocido como nuestro viejo amigo HTTP.

HTTP nos ha traído hasta donde estamos hoy en día, ofreciendo un fundamento sólido, estándar y confiable, pero como a toda tecnología, los cambios evolutivos de la realidad le han hecho mella y ya muestra algunos signos de obsolescencia.

En mi opinión, el principal dolor que HTTP/2 viene a aliviar es el de la velocidad de carga de los documentos a un navegador. Al ofrecer multiplexación (la capacidad de resolver varias llamadas en simultáneo) los documentos a desplegar en el navegador, típicamente una combinación de HTML, CSS, Javascript e imágenes, los tiempos de carga son menores ya que la carga de los diferentes recursos, aún en un caso muy desfavorable, se solapa, ahorrando tiempo en el proceso.

El siguiente diagrama ilustra el proceso de una requisición de carga de un documento muy simple:


 

Al pensar en documentos más complejos con decenas de imágenes, hojas de estilos y librerías en Javascript, podemos visualizar fácilmente como el ahorro de unas pocas décimas de segundo en cada interacción puede tener un impacto muy positivo en el tiempo total de descarga, pero los ahorros no solo se enfocan en tener multiplexación, al haber menos requisiciones también hay menos datos que transferir desde y hacia el navegador, al no tener que abrir y cerrar continuamente las conexiones (HTTP/2 mantiene una conexión abierta durante toda la sesión) hay ahorros al no crear tanta latencia por los requerimientos del propio protocolo. Así que, si sumamos todos los pequeños ahorros, con HTTP/2 podemos tener un tiempo total de carga que puede estar entre el 30% y 50% por debajo del tiempo total requerido con nuestro querido, pero cansado amigo HTTP/1.1.

Estas no son las únicas ventajas de utilizar la nueva versión del protocolo, pero puede que sean las más visibles y reconocidas. Pronto estaré escribiendo sobre la bi-direccionalidad de la comunicación (full-duplex), su paralelismo con los WebSockets y otros detalles como la priorización de flujos de datos, compresión de cabeceras y si, cómo no, algunas vulnerabilidades, que no faltan nunca.

Si no puedes esperar para leer más sobre el tema, hay un documento en la web de Desarrolladores de Google que te puede dar muchos detalles de interés, puedes consultarlo aquí.

En el próximo artículo escribiré sobre qué necesitas para implementar este protocolo en tus aplicaciones, con un ejemplo, claro está.

 ¿Usas esta versión del protocolo HTTP? De ser asi, me encantaría saber tu opinión.

 

 Valle de Tahodio, Tenerife, visto desde Jardina.