L'header CF-Cache-Status (o X-Cache altrove) racconta cosa ha fatto la CDN con la tua richiesta:
- HIT: servita dalla cache edge: l'origine non è stata toccata (l'obiettivo)
- MISS: non c'era: presa dall'origine e ora cachata; qualche MISS è fisiologico per nodo/scadenza
- EXPIRED / REVALIDATED: c'era ma scaduta: ricontrollata sull'origine
- DYNAMIC: Cloudflare ha deciso che non si cacha (default per l'HTML: sorpresa frequente; di serie CF cacha asset statici, non le pagine)
- BYPASS: qualcosa ha detto di non cachare:
Cache-Control: no-store, un cookie di sessione, una page rule
Chi comanda davvero è Cache-Control dall'origine (s-maxage parla proprio alle CDN) più le regole edge. Il flusso di debug: curl -sI https://... | grep -i cache due volte di fila: se la seconda non è HIT, la risposta è negli header che l'origine manda. E per l'HTML statico che può stare in cache: cache everything + TTL, o una cache che controlli tu.