HTTP caching e un meccanismo del protocollo HTTP che permette a browser, CDN e proxy di memorizzare copie di risposte e riutilizzarle per richieste successive senza contattare il server di origine. E la tecnica di performance piu importante del web. Un asset statico cachato correttamente (immagine, CSS, JS) si carica in 1 a 10 ms dalla cache del browser invece di 100 a 1000 ms dall origine. HTTP caching e controllato da intestazioni definite in RFC 7234 (giugno 2014) e RFC 9111 (giugno 2022): Cache-Control, Expires, ETag, Last-Modified, Vary.
Come funziona
- Cache hit se la copia e fresca.
- Conditional request con If-None-Match o If-Modified-Since, risposta 304.
- Cache miss senza validatore.
Cache-Control
| Direttiva | Significato |
|---|---|
max-age=N | Fresca per N secondi. |
s-maxage=N | Solo cache condivise. |
public | Qualsiasi cache. |
private | Solo browser. |
no-cache | Rivalidare prima. |
no-store | Mai memorizzare. |
stale-while-revalidate=N | Serve stale mentre rivalida. |
immutable | Non cambia mai. |
Cache-Control: public, max-age=31536000, immutable
Cache-Control: public, max-age=0, s-maxage=300, stale-while-revalidate=86400
Cache-Control: private, no-cache
Cache-Control: no-storeETag
Identificativo opaco (spesso hash). Il client invia If-None-Match. Strong o weak (prefisso W/).
Last-Modified
Timestamp con risoluzione di 1 secondo. ETag e piu preciso.
Vary
Vary: Accept-Encoding.Vary: Accept-Language.Vary: User-Agentda evitare.Vary: Cookierompe la cache condivisa.
Livelli di cache
| Livello | Posizione | Onora |
|---|---|---|
| Browser | Dispositivo utente | max-age, ETag |
| CDN edge | PoP vicino (Cloudflare, Fastly, Akamai, CloudFront) | s-maxage, stale-while-revalidate |
| Proxy aziendale | Reti aziendali | public, private |
| Service Worker | Pagina via JS | Logica propria |
Cache busting e fingerprinting
webpack, Vite, esbuild, Turbopack, Rollup. app.css diventa app.a1b2c3d4.css.
HTTP caching in WordPress
- WP Rocket.
- LiteSpeed Cache.
- W3 Total Cache.
- WP Super Cache.
- Cloudflare APO a 5 USD al mese.
Errori comuni
- max-age lungo su HTML.
- Asset statici senza intestazioni.
- Vary: User-Agent.
- Set-Cookie con public.
- Pragma: no-cache (obsoleto).
- Cache poisoning senza Vary corretto.
Come testarlo
- DevTools Network.
curl -I.- WebPageTest.
- Lighthouse.
- RedBot.
HTTP/2 e HTTP/3
Stessa semantica. Server Push deprecato in Chrome dal 2022, sostituito da Early Hints (RFC 8297).
Come InspectWP aiuta?
InspectWP analizza Cache-Control, ETag, Last-Modified e Vary di ogni asset.