HTTP nació como un protocolo extremadamente simple: un cliente solicitaba un recurso y el servidor respondía. Con el crecimiento de la web se convirtió en la columna vertebral del comercio electrónico, del streaming y de las aplicaciones móviles, lo que obligó a extenderlo sin perder compatibilidad. En este tema revisamos los hitos que llevaron de HTTP/1.1 a HTTP/2 y HTTP/3.
Analizaremos las limitaciones técnicas que arrastraba HTTP/1.1, los objetivos perseguidos por las siguientes versiones y la forma en la que el protocolo se apoya en TLS, TCP o UDP según la capa de transporte disponible.
HTTP/1.1 introdujo avances importantes frente a su predecesor (mantener conexiones abiertas, pipelining y dominios virtuales), pero heredó supuestos que ya no se sostienen hoy. Entre los más notorios se encuentran:
| Problema | Impacto en 2000-2010 | Impacto actual |
|---|---|---|
| Conexiones por dominio | Latencias aceptables porque los sitios tenían pocos recursos. | Bloqueos evidentes en sitios SPA con cientos de solicitudes. |
| Head-of-line blocking | Se mitigaba repartiendo recursos en subdominios (domain sharding). | Genera cascadas de retrasos y obliga a hacks como sprites o bundling excesivo. |
| Cabeceras repetidas | Poco perceptible en conexiones fijas. | Aumenta costos en móviles donde cada byte cuenta. |
Para resolver esas limitaciones se diseñaron protocolos experimentales como SPDY. La experiencia obtenida se volcó en HTTP/2 y HTTP/3, cuyos objetivos principales fueron:
En pruebas realizadas por CDNs y navegadores, pasar de HTTP/1.1 a HTTP/2 reduce entre un 20 % y un 40 % el tiempo total de carga en sitios con más de 100 recursos estáticos, incluso sin modificar el contenido.
HTTP/3 continúa esta línea pero replantea el transporte: usa UDP y flujos independientes para que la pérdida de un paquete no detenga al resto. Además integra desde el inicio características como el cero round-trip (0-RTT) que permiten retomar una sesión casi al instante.
HTTP es un protocolo de capa de aplicación, por lo que necesita apoyarse en una capa de transporte para entregar sus mensajes. Tradicionalmente se ejecutaba encima de TCP y, cuando se requería privacidad, se encapsulaba dentro de TLS (HTTPS).
La cronología puede resumirse así:
Este cambio tiene dos implicancias técnicas:
Es importante comprender que HTTP sigue siendo el mismo lenguaje semántico (métodos, cabeceras, códigos). Lo que cambia son las reglas con las que se empaqueta y se envía por la red para alcanzar mejores tiempos de entrega y mayor resiliencia.
Las conexiones persistentes son el cimiento de la web moderna: permiten enviar varios recursos sin cerrar el socket y mantienen activa la negociación criptográfica. Sin embargo, son un arma de doble filo cuando no se optimizan.
Buenas prácticas para aprovecharlas:
curl --http2 o curl --http3 permiten verificar rápidamente qué versión está en uso y cuántos RTT se consumen.Recordá que cualquier degradación en la latencia afecta directamente métricas de negocio como conversiones o permanencia. Incluso unos pocos cientos de milisegundos adicionales pueden hacer que una app móvil parezca “trabada”. Por eso, migrar a versiones modernas de HTTP debe ir acompañado de monitoreo continuo y pruebas A/B que validen el beneficio percibido por los usuarios.