4.2.1. Calculating Freshness Lifetime (Calcolo della durata di freschezza)
Una cache può calcolare la durata di freschezza (indicata come freshness_lifetime) di una risposta utilizzando la prima corrispondenza tra le seguenti:
- Se la cache è condivisa e la direttiva di risposta s-maxage (Sezione 5.2.2.9) è presente, utilizzare il suo valore, o
- Se la direttiva di risposta max-age (Sezione 5.2.2.8) è presente, utilizzare il suo valore, o
- Se il campo di intestazione di risposta Expires (Sezione 5.3) è presente, utilizzare il suo valore meno il valore del campo di intestazione di risposta Date, o
- Altrimenti, non è presente alcun tempo di scadenza esplicito nella risposta. Potrebbe essere applicabile una durata di freschezza euristica; vedere Sezione 4.2.2.
Si noti che questo calcolo non è vulnerabile allo sfasamento dell'orologio, poiché tutte le informazioni provengono dal server di origine.
Quando è presente più di un valore per una determinata direttiva (ad esempio, due campi di intestazione Expires, più direttive Cache-Control: max-age), il valore della direttiva è considerato non valido. Le cache sono incoraggiate a considerare le risposte che hanno informazioni di freschezza non valide come obsolete.
4.2.2. Calculating Heuristic Freshness (Calcolo della freschezza euristica)
Poiché i server di origine non forniscono sempre tempi di scadenza espliciti, una cache PUÒ (MAY) assegnare un tempo di scadenza euristico quando non è specificato un tempo esplicito, utilizzando algoritmi che usano altri valori di campi di intestazione (come il tempo Last-Modified) per stimare un tempo di scadenza plausibile. Questa specifica non fornisce algoritmi specifici, ma impone vincoli nel caso peggiore sui loro risultati.
Una cache NON DEVE (MUST NOT) utilizzare euristiche per determinare la freschezza quando è presente un tempo di scadenza esplicito nella risposta memorizzata. A causa dei requisiti nella Sezione 3, ciò significa che, in effetti, le euristiche possono essere utilizzate solo su risposte senza freschezza esplicita i cui codici di stato sono definiti come memorizzabili nella cache per impostazione predefinita (vedere Sezione 6.1 di [RFC7231]), e quelle risposte senza freschezza esplicita che sono state contrassegnate come esplicitamente memorizzabili nella cache (ad esempio, con una direttiva di risposta "public").
Se la risposta ha un campo di intestazione Last-Modified (Sezione 2.2 di [RFC7232]), le cache sono incoraggiate a utilizzare un valore di scadenza euristico che non sia più di una frazione dell'intervallo da quel momento. Un'impostazione tipica di questa frazione potrebbe essere del 10%.
Quando viene utilizzata un'euristica per calcolare la durata di freschezza, una cache DOVREBBE (SHOULD) generare un campo di intestazione Warning con un warn-code 113 (vedere Sezione 5.5.4) nella risposta se il suo current_age supera le 24 ore e tale avviso non è già presente.
Nota: La Sezione 13.9 di [RFC2616] proibiva alle cache di calcolare la freschezza euristica per URI con componenti di query (cioè, quelli contenenti '?'). Nella pratica, questo non è stato ampiamente implementato. Pertanto, i server di origine sono incoraggiati a inviare direttive esplicite (ad esempio, Cache-Control: no-cache) se desiderano impedire il caching.