Cómo habilitar HTTP/2 (y HTTP/3): Nginx, Apache, CDN
¿Quieres cargas más rápidas? Activa HTTP/2 y, si es posible, HTTP/3. Esta guía muestra cómo habilitar ambos en Nginx, Apache y CDNs comunes, cómo comprobar que funcionan y soluciones rápidas si no lo hacen.
¿Por qué HTTP/2 (y HTTP/3)?
HTTP/1.1 abre múltiples conexiones y repite encabezados. HTTP/2 multiplexa las solicitudes a través de una conexión y comprime los encabezados. HTTP/3 añade QUIC sobre UDP para evitar el bloqueo a nivel de transporte. Resultado: cargas más rápidas, especialmente en móviles y enlaces de alta latencia.
Comprobaciones rápidas: ¿están activados?
- DevTools: Pestaña Network > añade la columna "Protocol". Busca h2 o h3.
- CLI:
curl -I --http2 https://example.com
- HTTP/3:
curl -I --http3 https://example.com
(curl reciente) - Cascadas: Muchos archivos deberían empezar juntos en una conexión.
Nginx: habilitar HTTP/2 (y HTTP/3)
server {
# HTTP/2
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Descomenta si tu compilación soporta QUIC
# listen 443 quic reuseport;
# add_header Alt-Svc 'h3=":443"; ma=86400' always;
server_name example.com;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
add_header Strict-Transport-Security "max-age=31536000" always;
# tu configuración de certificado SSL aquí
}
Requisitos: Módulo HTTP/2 compilado, biblioteca TLS con soporte ALPN. La mayoría de los paquetes modernos incluyen ambos.
Apache: habilitar HTTP/2
# Cargar el módulo
LoadModule http2_module modules/mod_http2.so
# Habilitar globalmente o en un vhost
Protocols h2 http/1.1
# Opcional: restringir a TLS moderno
H2ModernTLSOnly on
El soporte de Apache para HTTP/3 es experimental. Quédate con HTTP/2 para producción.
CDN: habilitar HTTP/2/3 (Cloudflare, CloudFront, Akamai, Fastly)
La mayoría de las CDNs soportan HTTP/2 y HTTP/3. Actívalos para el tráfico HTTPS. Abre UDP/443 si ejecutas tu propio edge y quieres HTTP/3. Si UDP está bloqueado, los clientes volverán a HTTP/2. El protocolo de la CDN al origen es independiente; úsalo si es fácil, pero el impacto en el usuario proviene del edge.
Cloudflare
Dashboard > Speed > Optimization > HTTP/2 y HTTP/3 (activados por defecto)
AWS CloudFront
Configuración de la distribución > Versiones HTTP Soportadas > HTTP/2 y HTTP/3
Fastly
Configuración del servicio > Ajustes > Soporte HTTP/2 y HTTP/3
Verificar + comportamiento de fallback
Los navegadores negocian automáticamente durante el handshake TLS usando ALPN. Si HTTP/3 falla (UDP bloqueado), vuelven a HTTP/2. Si HTTP/2 falla (servidor antiguo), usan HTTP/1.1. No se necesita intervención manual.
Comprueba tu configuración:
- Los navegadores modernos muestran h2/h3 en la columna Protocol de DevTools
- Los gráficos de cascada muestran descargas paralelas en una conexión
- H3 a menudo ayuda más a los enlaces móviles/con pérdidas que a los de escritorio
Solución de problemas
¿HTTP/2 no funciona?
- Comprueba si la compilación de tu servidor incluye el módulo HTTP/2
- Verifica que la biblioteca TLS soporte ALPN (OpenSSL 1.0.2+)
- Asegúrate de que estás probando sobre HTTPS (los navegadores lo requieren)
- Comprueba si un proxy/balanceador de carga está degradando a HTTP/1.1
¿HTTP/3 no funciona?
- Verifica que el puerto UDP 443 esté abierto
- Comprueba si tu compilación soporta QUIC
- Confirma que se está enviando la cabecera Alt-Svc
- Prueba desde diferentes redes (algunas bloquean UDP)
Preguntas frecuentes
¿Necesito HTTPS para HTTP/2?
Sí. Los navegadores solo usan HTTP/2 sobre TLS.
¿Es necesario HTTP/3?
No, pero actívalo cuando puedas. Mantén HTTP/2 como fallback.
¿Cómo compruebo si HTTP/2/3 está activo?
Usa la columna Protocol de DevTools, o ejecuta curl con --http2 o --http3.
¿Por qué habilitar HTTP/2 no cambió mucho?
La lentitud de la aplicación y la pérdida de red todavía se aplican. Perfila y optimiza tu aplicación; usa HTTP/3 para enlaces con pérdidas.