Passa al contenuto principale

5.2.3. Estensioni di Cache-Control (Cache Control Extensions)

Il campo di intestazione Cache-Control può essere esteso attraverso l'uso di uno o più token di estensione della cache, ciascuno con un valore opzionale. Una cache DEVE ignorare le direttive di cache non riconosciute.

Le estensioni informative (quelle che non richiedono un cambiamento nel comportamento della cache) possono essere aggiunte senza cambiare la semantica delle altre direttive.

Le estensioni comportamentali sono progettate per funzionare agendo come modificatori della base esistente di direttive di cache. Vengono fornite sia la nuova direttiva che la direttiva standard, in modo che le applicazioni che non comprendono la nuova direttiva utilizzeranno per impostazione predefinita il comportamento specificato dalla direttiva standard, e quelle che comprendono la nuova direttiva la riconosceranno come modifica dei requisiti associati alla direttiva standard. In questo modo, le estensioni alle direttive Cache-Control possono essere effettuate senza interrompere le cache distribuite.

Ad esempio, si consideri una nuova direttiva di risposta ipotetica chiamata "community" che agisce come modificatore della direttiva private: oltre alle cache private, qualsiasi cache condivisa solo dai membri della comunità nominata è autorizzata a memorizzare in cache la risposta. Un server di origine che desidera consentire alla comunità UCI di utilizzare una risposta altrimenti privata nella propria cache condivisa potrebbe farlo includendo:

Cache-Control: private, community="UCI"

Una cache che riconosce tale estensione di cache community potrebbe ampliare il suo comportamento in conformità con tale estensione. Una cache che non riconosce l'estensione di cache community la ignorerebbe e aderirebbe alla direttiva private.

5.3. Scadenza (Expires)

Il campo di intestazione "Expires" fornisce la data/ora dopo la quale la risposta è considerata obsoleta. Vedere Sezione 4.2 per ulteriori discussioni sul modello di freschezza.

La presenza di un campo Expires non implica che la risorsa originale cambierà o cesserà di esistere a, prima o dopo quel momento.

Il valore del campo Expires è un timestamp HTTP-date, come definito nella Sezione 7.1.1.1 di [RFC7231].

Expires = HTTP-date

Ad esempio:

Expires: Thu, 01 Dec 1994 16:00:00 GMT

Un destinatario di cache DEVE interpretare i formati di data non validi, in particolare il valore "0", come rappresentanti un momento nel passato (cioè, "già scaduto").

Se una risposta include un campo Cache-Control con la direttiva max-age (Sezione 5.2.2.8), un destinatario DEVE ignorare il campo Expires. Allo stesso modo, se una risposta include la direttiva s-maxage (Sezione 5.2.2.9), un destinatario di cache condivisa DEVE ignorare il campo Expires. In entrambi questi casi, il valore in Expires è destinato solo ai destinatari che non hanno ancora implementato il campo Cache-Control.

Un server di origine senza orologio NON DEVE generare un campo Expires a meno che il suo valore non rappresenti un momento fisso nel passato (sempre scaduto) o il suo valore non sia stato associato alla risorsa da qualche altro sistema o persona con un orologio affidabile.

Storicamente, HTTP richiedeva che il valore del campo Expires non fosse superiore a un anno nel futuro. Sebbene durate di freschezza più lunghe non siano più vietate, valori estremamente grandi (ad esempio, una data futura oltre l'anno 9999) sono sconsigliati perché possono causare problemi con l'analisi dei timestamp e l'overflow aritmetico.

5.4. Pragma (Pragma)

Il campo di intestazione "Pragma" consente la retrocompatibilità con le cache HTTP/1.0, in modo che i client possano specificare una richiesta "no-cache" che comprenderanno (poiché Cache-Control non è stato definito fino a HTTP/1.1). Quando il campo di intestazione Cache-Control è anche presente e compreso in una richiesta, Pragma viene ignorato.

In HTTP/1.0, Pragma era definito come un campo estensibile per direttive specifiche dell'implementazione per i destinatari. Questa specifica sconsiglia l'uso di Pragma per qualsiasi cosa diversa dalla retrocompatibilità con le distribuzioni HTTP/1.0.

Pragma = 1#pragma-directive
pragma-directive = "no-cache" / extension-pragma
extension-pragma = token [ "=" ( token / quoted-string ) ]

Quando il campo di intestazione Cache-Control non è presente in una richiesta, le cache DEVONO considerare il campo di intestazione Pragma della richiesta per determinare se è presente una direttiva "no-cache".

Nota: Poiché il significato di "Pragma: no-cache" nelle risposte non è specificato, non fornisce una sostituzione affidabile per "Cache-Control: no-cache" in esse. I mittenti NON DOVREBBERO generare Pragma in un messaggio HTTP/1.1 che include Cache-Control.