2011-09-27 10 views
13

Non riesco a trovare la differenza pratica tra Cache-Control:no-store e Cache-Control:no-cache.Qual è la differenza tra no-cache e no-store in Cache-control?

Per quanto ne so, no-store significa che nessun dispositivo cache è autorizzato a memorizzare nella cache tale risposta. D'altra parte, no-cache significa che nessun dispositivo cache è autorizzato a servire una risposta memorizzata nella cache senza prima convalidarla con l'origine. Ma di cosa tratta questa convalida? Ottenere condizionale?

Cosa succede se una risposta ha no-cache, ma non ha Last-Modified o ETag?

Saluti.

risposta

12

Ma che cos'è questo controllo?

Verificare esattamente Last-Modified o ETag. Il client chiede al server se ha una nuova versione di dati che utilizza quelle intestazioni e se la risposta è no, servirà i dati memorizzati nella cache.


Aggiornamento

Da RFC

no-cache 
    If the no-cache directive does not specify a field-name, then a cache MUST NOT use 
the response to satisfy a subsequent request without successful revalidation with the 
origin server. This allows an origin server to prevent caching even by caches that 
have been configured to return stale responses to client requests. 
+0

e se la risposta memorizzata nella cache non ha 'Last-Modified' né' ETag'? – vtortola

+0

Penso che in questo caso la risposta non verrà memorizzata nella cache. –

+0

Ecco come interpreto RFC. (Aggiunto snippet) –

2

Come identificata, non -cache non significa che non c'è mai il caching, ma piuttosto che l'user agent deve sempre chiedere al server se è OK usare quello che ha memorizzato nella cache. Al contrario, nessun negozio dice che non tiene nemmeno una copia, il che significa che non c'è nulla da chiedere. Se conosci la risposta a "Posso riutilizzare questo?" è sempre no, si ottiene un incremento delle prestazioni di (1) ignorando il sovraccarico di chiedere e (2) di non scaricare un eventuale risultato memorizzato riutilizzabile per fare spazio al nuovo risultato mai riutilizzato.

Oltre alle prestazioni, c'è una differenza di comportamento con la cronologia del browser . La sezione specifica HTTP 1.1, 13.13, dice che "il tempo di scadenza non si applica ai meccanismi di cronologia". L'intestazione no-cache descrive la scadenza e pertanto non si applica ai meccanismi della cronologia come il pulsante Indietro. Pertanto, l'utente può navigare indietro a una pagina precedente con no-cache senza che il server venga contattato.

L'intestazione di no-store, d'altra parte, impedisce che i dati vengano memorizzati al di fuori di una sessione, nel qual caso semplicemente non è disponibile per un meccanismo di cronologia da utilizzare. Con no-store, se l'utente termina la sessione navigando verso un altro dominio e poi torna indietro, l'unico modo per il browser di sapere cosa visualizzare è quello di ottenere di nuovo la pagina iniziale dal server.

Ecco come un Chromium issue su questo argomento fa la distinzione:

no-cache non significa "non cache questa" (che sarebbe no-store). no-cache significa che non lo si usa per i carichi normali a meno che la risorsa non venga riconvalidata per la freschezza. Le navigazioni storiche non sono carichi normali.