Torna al blog

Come abilitare HTTP/2 (e HTTP/3): Nginx, Apache, CDN

2025-08-139 min di lettura

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.