Come abilitare HTTP/2 (e HTTP/3): Nginx, Apache, CDN
Vuoi caricamenti più veloci? Abilita HTTP/2 e, se possibile, HTTP/3. Questa guida mostra come abilitare entrambi su Nginx, Apache e CDN comuni, come verificarne il funzionamento e soluzioni rapide in caso di problemi.
Perché HTTP/2 (e HTTP/3)?
HTTP/1.1 apre connessioni multiple e ripete gli header. HTTP/2 multiplexa le richieste su un'unica connessione e comprime gli header. HTTP/3 aggiunge QUIC su UDP per evitare blocchi a livello di trasporto. Risultato: caricamenti più veloci, specialmente su mobile e collegamenti ad alta latenza.
Controlli rapidi: sono attivi?
- DevTools: Scheda Network > aggiungi la colonna "Protocol". Cerca h2 o h3.
- CLI:
curl -I --http2 https://example.com
- HTTP/3:
curl -I --http3 https://example.com
(curl recente) - Waterfall: Molti file dovrebbero iniziare insieme su un'unica connessione.
Nginx: abilita HTTP/2 (e HTTP/3)
server {
# HTTP/2
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Decommenta se la tua build supporta 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;
# la tua configurazione del certificato SSL qui
}
Requisiti: modulo HTTP/2 compilato, libreria TLS con supporto ALPN. La maggior parte dei pacchetti moderni include entrambi.
Apache: abilita HTTP/2
# Carica il modulo
LoadModule http2_module modules/mod_http2.so
# Abilita globalmente o in un vhost
Protocols h2 http/1.1
# Opzionale: limita a TLS moderni
H2ModernTLSOnly on
Il supporto HTTP/3 di Apache è sperimentale. Attieniti a HTTP/2 per la produzione.
CDN: abilita HTTP/2/3 (Cloudflare, CloudFront, Akamai, Fastly)
La maggior parte delle CDN supporta HTTP/2 e HTTP/3. Abilitali per il traffico HTTPS. Apri la porta UDP/443 se gestisci il tuo edge e vuoi HTTP/3. Se UDP è bloccato, i client torneranno a HTTP/2. Il protocollo dalla CDN all'origine è separato; usalo se è facile, ma l'impatto sull'utente deriva dall'edge.
Cloudflare
Dashboard > Speed > Optimization > HTTP/2 e HTTP/3 (abilitati per impostazione predefinita)
AWS CloudFront
Impostazioni di distribuzione > Versioni HTTP supportate > HTTP/2 e HTTP/3
Fastly
Configurazione del servizio > Impostazioni > Supporto HTTP/2 e HTTP/3
Verifica + comportamento di fallback
I browser negoziano automaticamente durante l'handshake TLS utilizzando ALPN. Se HTTP/3 fallisce (UDP bloccato), tornano a HTTP/2. Se HTTP/2 fallisce (server vecchio), usano HTTP/1.1. Nessun intervento manuale necessario.
Verifica la tua configurazione:
- I browser moderni mostrano h2/h3 nella colonna Protocollo di DevTools
- I grafici Waterfall mostrano download paralleli su un'unica connessione
- H3 aiuta spesso i collegamenti mobile/con perdita più del desktop
Risoluzione dei problemi
HTTP/2 non funziona?
- Verifica se la tua build del server include il modulo HTTP/2
- Verifica che la libreria TLS supporti ALPN (OpenSSL 1.0.2+)
- Assicurati di testare tramite HTTPS (i browser lo richiedono)
- Verifica se un proxy/load balancer sta facendo il downgrade a HTTP/1.1
HTTP/3 non funziona?
- Verifica che la porta UDP 443 sia aperta
- Verifica se la tua build supporta QUIC
- Conferma che l'header Alt-Svc venga inviato
- Testa da reti diverse (alcune bloccano UDP)
FAQ
Ho bisogno di HTTPS per HTTP/2?
Sì. I browser usano HTTP/2 solo su TLS.
È richiesto HTTP/3?
No, ma abilitalo quando puoi. Mantieni HTTP/2 come fallback.
Come controllo se HTTP/2/3 è attivo?
Usa la colonna Protocollo di DevTools, oppure esegui curl con --http2 o --http3.
Perché l'abilitazione di HTTP/2 non ha cambiato molto?
La lentezza dell'applicazione e la perdita di rete si applicano ancora. Metti in cache e profila la tua applicazione; usa HTTP/3 per i collegamenti con perdita.