- HTTP/3 se ha estado desarrollando desde 2016, y QUIC, el protocolo en el que se basa, fue introducido por primera vez por Google en 2013
- Actualmente está estandarizado y cuenta con un soporte amplio como el siguiente
- Es compatible con el 95% de los navegadores
- El 32% de las solicitudes HTTP de Cloudflare usan HTTP/3
- El 35% de los sitios web muestran soporte para HTTP/3 (mediante
alt-svc o DNS)
- Sin embargo, las bibliotecas estándar de los principales lenguajes carecen de soporte para QUIC y HTTP/3
- No está incluido en las bibliotecas estándar de Node.js, Go, Rust, Python, Ruby, etc.
- Curl añadió recientemente soporte para HTTP/3, pero sigue en estado experimental y está desactivado por defecto
- Nginx, un servidor popular, tiene soporte experimental y está desactivado por defecto
- Apache no tiene planes de soportar HTTP/3
- Ingress-Nginx de Kubernetes abandonó sus planes de soportar HTTP/3
La necesidad después de HTTP/1.1
- HTTP/3 es útil para tráfico de navegadores web y CDN con alta latencia
- Principales ventajas que ofrecen HTTP/2 y HTTP/3:
- Multiplexación para reducir la latencia de respuesta
- Compresión de encabezados HTTP para reducir el tráfico (usando HPACK y QPACK)
- Streaming bidireccional que permite intercambio de datos en tiempo real entre cliente y servidor
- Priorización para procesar primero las solicitudes importantes
- Ventajas adicionales de HTTP/3:
- Procesamiento independiente de streams para que la pérdida de paquetes no afecte a otros streams
- Handshake TLS 0-RTT para mejorar la velocidad de inicialización de la conexión
- Migración de conexión para mantener la conexión cuando cambia la dirección IP
- Mejoras en el control de congestión para aumentar el rendimiento y la estabilidad
Mejora de rendimiento de HTTP/3
- Resultados del benchmark de RequestMetric:
- HTTP/3 ofrece tiempos de respuesta más rápidos que HTTP/1.1 y HTTP/2
- Caso real de Fastly:
- En HTTP/3, el tiempo hasta el primer byte se redujo en un 18%
El problema de la falta de soporte para HTTP/3
- HTTP/3 tiene amplio soporte en navegadores y CDN, pero sigue siendo difícil de usar para desarrolladores comunes
- Actualmente existen dos tipos de tráfico web:
- Web de hiperescala: basada en navegadores principales y grandes servidores (Google, Meta, Amazon, etc.)
- Web de cola larga: basada en servidores y clientes pequeños y medianos (API backend, apps móviles, IoT, etc.)
- Diferencias principales:
- El tráfico de cola larga representa el 67% del tráfico total
- La hiperescala puede desarrollar e implementar rápido; la cola larga tiene menos recursos y prioriza la estabilidad
- Existe una alta dependencia de herramientas open source
OpenSSL y el problema con QUIC
- OpenSSL es la base de la mayoría de las herramientas de red open source
- BoringSSL lanzó una API con soporte para QUIC en 2018, pero OpenSSL introdujo su propia API de QUIC
- Problemas principales:
- No es compatible con implementaciones existentes basadas en BoringSSL
- A Curl y a los principales lenguajes les resulta difícil cambiar su dependencia de OpenSSL
- Node.js consideró usar BoringSSL en lugar de OpenSSL, pero eso no se concretó
Perspectivas a futuro
- A medida que la web de hiperescala adopta HTTP/3, podría surgir una brecha de rendimiento frente a la web de cola larga
- La falta de soporte para HTTP/3 podría causar problemas como:
- Reforzar la ventaja en velocidad y estabilidad de los sitios de hiperescala
- Si los frameworks basados en HTTP/3 se vuelven comunes, la web de cola larga podría tener dificultades para acceder a ellos
- La falta de soporte para HTTP/3 podría usarse como criterio para bloquear clientes
- Soluciones posibles:
- Resolver los problemas de la API de QUIC de OpenSSL
- Desarrollar herramientas y adaptadores que mejoren la compatibilidad con implementaciones existentes de QUIC y HTTP/3
- Impulsar una mayor expansión del soporte de HTTP/3 en herramientas open source
Conclusión
- HTTP/3 ofrece claras ventajas de rendimiento y estabilidad, pero actualmente solo las empresas de hiperescala pueden usarlo con facilidad
- Se necesitan mejoras en herramientas y estándares para que la web de cola larga también pueda usar HTTP/3 fácilmente
1 comentarios
Opiniones en Hacker News
Hay quienes opinan que es difícil encontrar herramientas populares de código abierto con soporte completo para HTTP/3
Las bibliotecas estándar de los principales lenguajes no incluyen QUIC ni HTTP/3
El mayor problema del despliegue a gran escala de HTTP/3 es que aumenta la superficie de código potencialmente vulnerable
La adopción lenta de QUIC se debe a que OpenSSL no proporcionaba los elementos básicos necesarios para las implementaciones existentes de QUIC
HTTP/2 y HTTP/3 ya no se perciben como protocolos de capa de aplicación, sino a nivel de TCP y TLS
nginx todavía no ofrece soporte para HTTP/3 listo para producción
En Python se está usando niquests, que sí soporta HTTP/3
Node.js publicó una actualización sobre el estado de QUIC y está teniendo dificultades por el lento soporte de API en OpenSSL
Si se usan balanceadores de carga de proveedores de nube pública, HTTP/3 se utiliza por defecto
Todos los proyectos son, en cierta medida, impulsados por el código abierto y la comunidad