HTTP/2 para mejorar y acelerar Internet

 29/Mar/2016 -   Internet
HTTP/2 para mejorar y acelerar Internet

La historia de la web sigue siendo joven, aunque no lo parezca, el protocolo web HTTP/1.0 fue aprobado en la RFC 1945 en 1996, y solo 3 años después se aprobó el estándar que usan la mayoría de servidores web del mundo, el HTTP/1.1, ahora es el turno del HTTP/2.

El RFC para el nuevo estándar web HTTP/2.0 es de 2015, por lo que quizás aun es pronto para hablar de su uso real e implementación. La realidad es que gracias a muchos servicios de CDN su uso se está extendiendo de forma realmente rápida, así como la ayuda de las recomendaciones de uso de grandes como Google. Desde Stackscale también recomendamos su uso, siendo ya muchos los proyectos en nuestras plataformas de cloud los que hacen uso de HTTP/2.0.

Para entender mejor que es el HTTP vamos a empezar con algo de teoría que nos ayudará a entender el porque de la versión 2.0.

¿Qué es y de dónde viene HTTP?

La necesidad de contar con protocolos de comunicación sencillos llevó a los científicos del CERN a la creación del HTTP combinando diferentes tecnologías:

  • Documentos de Hipertexto.
  • Recuperación de la información basada en la red.
  • El lenguaje Standard Generalized Markup Language (SGML).

La combinación de estas tecnologías engloban lo que conocemos como protocolo HTTP, facilitando en Internet la comunicación y acceso a la información.

El protocolo HTTP no tiene estado, esto significa que cada comunicación entre cliente y servidor no mantiene información alguna. Pero como con el avance de Internet se ha hecho necesario almacenar cierta información, se desarrollaron algunas estrategias para gestionar los estados, como son las famosas cookies y las sesiones.

La nomenclatura de una llamada http o https para servidor seguro (SSL) es la siguiente:

http://[dominio o ip]:[puerto]/[ruta y/o fichero]?[atributo]

HTTP/2. Mejorando la comunicación y la velocidad

Han tenido que pasar más de 15 años para que este protocolo se actualizase. Quizás la presión de Google ayudo a su avance y aprobación, después del intento de lanzar su propio protocolo, SPDY, que hoy es HTTP/2.0. Podéis acceder al RFC 7540 que hablar sobre HTTP/2.0.

La nueva versión 2.0 es 100% compatible con el funcionamiento de la versión 1.1 y 1.0. Se mantienen los mismo códigos de estado (1XX, 2XX, 3XX, 4XX, 5XX), los métodos (GET, POST, PUT, HEAD, etc) y la estructura de la cadena de llamada.

Pero las diferencias son importantes y son las siguientes:

  • Una única conexión. En HTTP/1.x para cargar un contenido eran necesarias varias conexiones TCP. Ahora con HTTP/2.0 una única conexión puede realizar múltiples solicitudes y respuestas en paralelo.
  • Eliminación de información redundante. De esta forma reducimos la latencia y consumimos menos recursos.
  • Multiplexación. Se da solución al problema llamado “Head-of-line blocking” de HTTP/1.1 provocaba que sólo una solicitud es usada por una conexión, llevando a una congestión. Ahora varias peticiones se pueden resolver a la vez.
  • HTTP 2.0 es un protocolo binario. Esto facilita encontrar el comienzo y el final de cada frame, cosa que en un protocolo de texto es complicado. Además de reducir la posibilidad de error.
  • Servicio “server push”. Permite la carga de archivos como CSS, JavaScript, imágenes, etc desde el servidor si que éste lo solicite. Ya no tenemos que esperar a que nuestro navegador interprete el HTML para continuar la descarga del resto de elementos de una web.
  • Compresión de cabeceras para transmitir menos información. Con el uso del algoritmo HPACK6 se reduce el tamaño de las cabeceras, mejorando el tiempo de respuesta y también mejorando la eficiencia, sobre todo en móviles.
  • Priorización de flujos. Permite priorizar que paquetes son más importantes en la comunicación cliente-servidor-cliente. De esta forma los objetos más relevantes pueden contar con prioridad.
  • No requiere cifrado TLS. En HTTP/2 el uso del cifrado TLS (Trasnport Layer Security) es opcional. Pero la mayoría de navegadores están anunciando que solo soportarán HTTP/2.0 sobre TLS para mayor seguridad. Recordemos que TLS es un protocolo criptográfico de la capa de transporte (de criptografía asimétrica), que proporciona comunicaciones seguras por la red. El uso de TLS añade un retardo adicional.

El resultado final será que podremos disponer de una carga mucho más rápida para todos los recursos de nuestras páginas web.

En resumen

Ahora tenemos trabajo por delante, ya que para que HTTP 2 funcione necesitamos que tanto el cliente como el servidor tengan soporte de este protocolo. De la parte de los navegadores de Internet podría afirmar que todas las últimas versiones ya incorporaron dicho soporte.

En cuanto a los servidores web es cuestión de ir actualizando a versiones con dicho soporte, sabemos que tanto Apache, Nginx, OpenLiteSpeed, Jetti, etc ya han implementado su soporte.