Calcolatore della scadenza della cache HTTP
Inserisci i valori Cache-Control, Expires, Date e Age di una risposta, l’ora in cui è stata ricevuta e l’ora in cui verificare. La calcolatrice dà la durata di freschezza, l’età attuale e se la risposta è ancora fresca.
Cosa fa questa calcolatrice
Tratta una parte della RFC 9111, la norma sulla cache HTTP: il calcolo della freschezza. È la parte che decide se una risposta memorizzata può essere riutilizzata senza verificare con il server di origine. La validazione (ETag, If-Modified-Since, 304), Vary e il Cache-Control lato richiesta non sono trattati.
La freschezza non è un aggiornamento né una cancellazione
Una risposta scaduta significa solo che una cache non può riutilizzarla senza prima verificare. Non significa che la schermata del browser si aggiorni da sola, e non significa che il file sul server di origine venga modificato o cancellato. Allo stesso modo, una risposta fresca non significa che il file sul server non sia cambiato. L’intestazione Expires, dice la norma, «non implica che la risorsa originale cambierà o cesserà di esistere a quell’ora, prima o dopo». Questa calcolatrice elabora solo l’aritmetica del tempo della copia in cache.
Durata di freschezza ed età attuale
- Durata di freschezza: la lunghezza di tempo per cui la risposta può restare «fresca». È stabilita dalla risposta stessa (Cache-Control o Expires) e non cambia con il passare del tempo.
- Età attuale: il tempo trascorso da quando la risposta è stata generata. Cresce con il passare del tempo.
- È fresca? La risposta è fresca solo quando la durata di freschezza è maggiore dell’età attuale (quando sono uguali, è scaduta).
- Freschezza rimanente = durata di freschezza − età attuale.
Quale valore stabilisce la durata di freschezza
Secondo la sezione 4.2.1 della RFC 9111, si usa la prima corrispondenza:
| Ordine | Cache condivisa (CDN, proxy) | Cache privata (browser) |
|---|---|---|
| 1 | s-maxage | (s-maxage non è usato) |
| 2 | max-age | max-age |
| 3 | Expires − Date | Expires − Date |
| 4 | Se non ce n’è nessuno, non c’è una scadenza esplicita | Lo stesso |
- Se max-age è presente, Expires è ignorato. In una cache condivisa, se s-maxage è presente, max-age ed Expires sono ignorati (sezione 5.3).
- Se la stessa direttiva compare più di una volta, si usa la prima (uno degli approcci che la norma consente).
- Un max-age o s-maxage che non è un numero intero, o è tra virgolette (la norma dice che un mittente non deve generare la forma tra virgolette), è trattato come non valido e la risposta è considerata scaduta (durata di freschezza 0). Un valore superiore a 2.147.483.648 è trattato come 2.147.483.648 (sezione 1.2.2).
- Se Expires è
0o una data che non esiste, la risposta è trattata come già scaduta (sezione 5.3). - Quando non c’è una scadenza esplicita, la freschezza euristica (ad esempio una stima da Last-Modified) non è calcolata. La norma lascia la durata euristica all’implementazione.
Come si calcola l’età attuale
Le formule vengono dalla sezione 4.2.3 della RFC 9111:
- Età apparente = max(0, ora di ricezione − Date)
- Età alla ricezione = max(età apparente, intestazione Age + ritardo della risposta)
- Età attuale = età alla ricezione + tempo trascorso dalla ricezione
Questa calcolatrice non chiede l’ora in cui la richiesta è stata inviata, quindi prende il ritardo della risposta (il tempo dall’invio della richiesta alla ricezione della risposta) come 0. Su una connessione con molto ritardo, l’età calcolata può essere minore di quella reale. La norma consente anche di usare la sola intestazione Age più il ritardo.
Regole per l’input
- Inserisci le date come IMF-fixdate (ad esempio
Sun, 06 Nov 1994 08:49:37 GMT) o come ora UTC come2026-10-21 07:28:00. Tutto è in UTC (GMT); i fusi orari non sono gestiti. L’anno deve andare dal 1900 al 2100 e i secondi da 0 a 59 (un secondo intercalare, 60, non è accettato). Il nome del giorno non viene confrontato con la data. - I formati RFC 850 e asctime sono formati che i destinatari HTTP devono accettare, ma questa calcolatrice non li supporta. (Questo non significa che siano non validi in HTTP. Converti il valore in un IMF-fixdate.)
- Se Date è vuoto, l’ora che inserisci in «Ora in cui la risposta è stata ricevuta» è usata al posto di Date. La RFC 9110 dice che un destinatario che riceve una risposta senza Date registra l’ora di ricezione e la aggiunge come Date. Se anche quell’ora è vuota, i calcoli che richiedono Date (Expires − Date e l’età apparente) non possono essere fatti. L’ora corrente del browser non è mai usata automaticamente; è inserita solo quando premi il pulsante «ora corrente», nel campo «Ora in cui verificare».
- L’istante da verificare non deve essere precedente all’istante di ricezione della risposta.
Altre direttive Cache-Control
Non sono usate nel calcolo, ma sono mostrate come note sul riutilizzo.
- no-store: non deve essere memorizzata. private: una cache condivisa non deve memorizzarla (un browser può).
- no-cache (senza argomenti): anche mentre è fresca, non può essere riutilizzata senza validazione.
- must-revalidate: una volta scaduta, non deve essere usata senza validazione. proxy-revalidate: lo stesso, ma non si applica a una cache privata.
- public: consente esplicitamente la memorizzazione.
- immutable (RFC 8246) e stale-while-revalidate e stale-if-error (RFC 5861) sono fuori dalla RFC 9111. Sono riconosciute ma non usate nel calcolo.
Esempi
| Input | Risultato |
|---|---|
| max-age=3600, nessun Age, 1.800 s dopo la ricezione | Durata di freschezza 3.600 s, età attuale 1.800 s, 1.800 s rimanenti (fresca) |
| Lo stesso, a esattamente 3.600 s | Età attuale 3.600 s. È uguale alla durata di freschezza, quindi è scaduta |
| max-age=3600, Age=600, appena ricevuta | Età attuale 600 s, 3.000 s rimanenti |
| Cache condivisa con s-maxage=60, max-age=3600 | Durata di freschezza 60 s (max-age è ignorato) |
Da sapere
- Questo è un calcolo basato sulla norma. Browser e CDN reali non si comportano sempre esattamente come descrive la norma. Azioni come un ricaricamento forzato e impostazioni specifiche della CDN possono dare risultati diversi. Il comportamento di un prodotto particolare non è garantito.
- Freschezza euristica, validazione, Vary, direttive di richiesta e somma di più cache non sono trattati.
Fonti e verifiche
Quanto segue è stato verificato sul testo completo delle norme il 1º novembre 2026:
- RFC 9111, «HTTP Caching»: https://www.rfc-editor.org/rfc/rfc9111 (sezioni 1.2.2, 4.2.1, 4.2.3, 5.1, 5.2.2 e 5.3, incluso il test di freschezza
freshness_lifetime > current_age) - RFC 9110, «HTTP Semantics»: https://www.rfc-editor.org/rfc/rfc9110 (sezioni 5.6.7 e 6.6.1)
Questa calcolatrice segue quelle sezioni solo per la freschezza. Superare questo calcolo non è un’affermazione che un prodotto o un server sia conforme alla norma.
Domande frequenti
Cosa succede quando sono presenti sia max-age sia Expires?
max-age ha la precedenza ed Expires è ignorato (RFC 9111, sezione 5.3).
s-maxage si applica a un browser?
s-maxage è una direttiva per le cache condivise. Una cache privata (un browser) non la usa.
Cos’è l’intestazione Age?
È il numero di secondi, scritto da una cache lungo il percorso, da quando la risposta è stata generata o verificata l’ultima volta presso l’origine. Questa calcolatrice lo usa per trovare l’età attuale.
Una risposta scaduta sparisce o si aggiorna da sola?
No. Scaduta significa solo che una cache deve verificare prima di riutilizzarla. Non aggiorna lo schermo né cambia nulla sul server di origine.
Come posso controllare un orario?
Il convertitore di timestamp Unix e il calcolatore di espressioni cron possono aiutare.