Passa al contenuto principale

3. Memorizzazione delle risposte nelle cache (Storing Responses in Caches)

Una cache NON DEVE (MUST NOT) memorizzare una risposta a qualsiasi richiesta, a meno che:

  • Il metodo di richiesta sia compreso dalla cache e definito come memorizzabile in cache, e
  • il codice di stato della risposta sia compreso dalla cache, e
  • la direttiva di cache "no-store" (vedere Sezione 5.2) non appaia nei campi di intestazione della richiesta o della risposta, e
  • la direttiva di risposta "private" (vedere Sezione 5.2.2.6) non appaia nella risposta, se la cache è condivisa, e
  • il campo di intestazione Authorization (vedere Sezione 4.2 di [RFC7235]) non appaia nella richiesta, se la cache è condivisa, a meno che la risposta lo consenta esplicitamente (vedere Sezione 3.2), e
  • la risposta soddisfi una delle seguenti condizioni:
    • contiene un campo di intestazione Expires (vedere Sezione 5.3), o
    • contiene una direttiva di risposta max-age (vedere Sezione 5.2.2.8), o
    • contiene una direttiva di risposta s-maxage (vedere Sezione 5.2.2.9) e la cache è condivisa, o
    • contiene un'Estensione Cache Control (vedere Sezione 5.2.3) che consente di memorizzarla in cache, o
    • ha un codice di stato definito come memorizzabile in cache per impostazione predefinita (vedere Sezione 4.2.2), o
    • contiene una direttiva di risposta public (vedere Sezione 5.2.2.5).

Si noti che uno qualsiasi dei requisiti elencati sopra può essere sostituito da un'estensione di controllo della cache; vedere Sezione 5.2.3.

In questo contesto, una cache ha "compreso" un metodo di richiesta o un codice di stato di risposta se lo riconosce e implementa tutto il comportamento relativo al caching specificato.

Si noti che, durante il funzionamento normale, alcune cache non memorizzeranno una risposta che non ha né un validatore di cache né un tempo di scadenza esplicito, poiché tali risposte di solito non sono utili da memorizzare. Tuttavia, le cache non sono vietate dal memorizzare tali risposte.

3.1. Memorizzazione di risposte incomplete (Storing Incomplete Responses)​

Un messaggio di risposta è considerato completo quando tutti gli ottetti indicati dal framing del messaggio ([RFC7230]) sono stati ricevuti prima della chiusura della connessione. Quando il metodo di richiesta è GET, il codice di stato della risposta è 200 (OK) e l'intera sezione di intestazione della risposta è stata ricevuta, una cache PUÒ (MAY) memorizzare un corpo del messaggio di risposta incompleto se la voce di cache viene registrata come incompleta. Allo stesso modo, una risposta 206 (Partial Content) PUÒ (MAY) essere memorizzata come se fosse una voce di cache 200 (OK) incompleta. Una cache NON DEVE TUTTAVIA (MUST NOT) memorizzare risposte incomplete o a contenuto parziale se non supporta i campi di intestazione Range e Content-Range o non comprende le unità di intervallo utilizzate in tali campi.

Una cache PUÒ (MAY) completare una risposta incompleta memorizzata effettuando una richiesta di intervallo successiva ([RFC7233]) e combinando la risposta riuscita con la voce memorizzata, come definito nella Sezione 3.3. Una cache NON DEVE (MUST NOT) utilizzare una risposta incompleta per soddisfare le richieste, a meno che la risposta non sia stata completata o la richiesta sia parziale e specifichi un intervallo completamente contenuto nella risposta incompleta. Una cache NON DEVE (MUST NOT) inviare una risposta parziale a un client senza contrassegnarla esplicitamente come tale con il codice di stato 206 (Partial Content).

3.2. Memorizzazione di risposte a richieste autenticate (Storing Responses to Authenticated Requests)​

Una cache condivisa NON DEVE (MUST NOT) utilizzare una risposta memorizzata nella cache a una richiesta con un campo di intestazione Authorization (Sezione 4.2 di [RFC7235]) per soddisfare una richiesta successiva, a meno che nella risposta non sia presente una direttiva di cache che ne consenta la memorizzazione.

In questa specifica, le seguenti direttive di risposta Cache-Control (Sezione 5.2.2) hanno tale effetto: must-revalidate, public e s-maxage.

Si noti che le risposte memorizzate nella cache che contengono le direttive di risposta "must-revalidate" e/o "s-maxage" non devono essere fornite come obsolete dalle cache condivise (Sezione 4.2.4). In particolare, una risposta che contiene sia "max-age=0, must-revalidate" sia "s-maxage=0" non può essere utilizzata per soddisfare una richiesta successiva senza rivalidarla sul server di origine.

3.3. Combinazione di contenuti parziali (Combining Partial Content)​

Una risposta può trasportare solo una rappresentazione parziale se la connessione è stata chiusa prematuramente o se la richiesta ha utilizzato uno o più specificatori di intervallo ([RFC7233]). Dopo molteplici trasmissioni di questo tipo, una cache potrebbe aver ricevuto più intervalli della stessa rappresentazione. Una cache PUÒ (MAY) combinare questi intervalli in una singola risposta memorizzata e riutilizzare tale risposta per soddisfare le richieste successive, se condividono tutte lo stesso validatore forte e la cache soddisfa i requisiti del client nella Sezione 4.3 di [RFC7233].

Nel combinare la nuova risposta con una o più risposte memorizzate, una cache DEVE (MUST):

  • rimuovere tutti i campi di intestazione Warning nella risposta memorizzata con codice di avviso 1xx (vedere Sezione 5.5);
  • conservare tutti i campi di intestazione Warning nella risposta memorizzata con codice di avviso 2xx; e
  • utilizzare gli altri campi di intestazione forniti nella nuova risposta, ad eccezione di Content-Range, per sostituire tutte le istanze dei corrispondenti campi di intestazione nella risposta memorizzata.