Volver al Blog

Cómo habilitar HTTP/2 (y HTTP/3): Nginx, Apache, CDN

2025-08-139 min de lectura

¿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.