Perché sia ​​no-cache che no-store dovrebbero essere usati nella risposta HTTP?

Mi è stato detto di evitare perdite di informazioni utente, solo “no-cache” in risposta non è sufficiente. “no-store” è anche necessario.

Cache-Control: no-cache, no-store 

Dopo aver letto questa specifica http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html , non sono ancora del tutto sicuro del perché.

La mia attuale comprensione è che è solo per il server cache intermedio. Anche se “no-cache” è in risposta, il server cache intermedio può ancora salvare il contenuto nella memoria non volatile. Il server di cache intermedio deciderà se utilizzare il contenuto salvato per la richiesta successiva. Tuttavia, se “no-store” è nella risposta, il server di cache intermedio non dovrebbe memorizzare il contenuto. Quindi, è più sicuro.

C’è qualche altra ragione per cui abbiamo bisogno sia di “no-cache” e “no-store”?

Devo chiarire che no-cache non significa non memorizzare nella cache . In effetti, significa “riconvalida con il server” prima di utilizzare qualsiasi risposta memorizzata nella cache, a ogni richiesta.

must-revalidate , d’altra parte, ha solo bisogno di rivalidare quando la risorsa è considerata obsoleta.

Se il server dice che la risorsa è ancora valida, la cache può rispondere con la sua rappresentazione, riducendo così la necessità per il server di inviare nuovamente l’intera risorsa.

no-store è effettivamente la direttiva full do not cache e ha lo scopo di impedire l’archiviazione della rappresentazione in qualsiasi forma di cache.

Dico di tutto, ma nota questo nella specifica HTTP 26C RFC:

I buffer di cronologia POSSONO memorizzare tali risposte come parte del loro normale funzionamento

Ma questo è omesso dalle nuove specifiche RFC 7234 HTTP in potenziale tentativo di rendere il no-store più forte, vedi:

http://tools.ietf.org/html/rfc7234#section-5.2.1.5

In determinate circostanze, IE6 memorizzerà comunque i file nella cache anche quando Cache-Control: no-cache è presente nelle intestazioni delle risposte.

Gli stati del W3C di no-cache :

Se la direttiva no-cache non specifica un nome-campo, allora una cache NON DEVE utilizzare la risposta per soddisfare una richiesta successiva senza una riconvalida con il server di origine.

Nella mia applicazione, se si visitava una pagina con l’intestazione no-cache , quindi si disconnetteva e quindi si riavviava nel browser, IE6 avrebbe comunque acquisito la pagina dalla cache (senza una nuova richiesta / convalida al server). L’aggiunta nell’intestazione del no-store ha impedito di farlo. Ma se prendi il W3C alla loro parola, in realtà non c’è modo di controllare questo comportamento:

I buffer di cronologia POSSONO memorizzare tali risposte come parte del loro normale funzionamento.

Le differenze generali tra la cronologia del browser e la normale memorizzazione nella cache HTTP sono descritte in una sottosezione specifica della specifica .

Dalla specifica HTTP 1.1 :

no-store :

Lo scopo della direttiva no-store è impedire il rilascio involontario o la conservazione di informazioni sensibili (ad esempio, sui nastri di backup). La direttiva no-store si applica all’intero messaggio e può essere inviata in risposta o in una richiesta. Se inviato in una richiesta, una cache NON DEVE memorizzare alcuna parte di questa richiesta o alcuna risposta ad essa. Se inviato in risposta, una cache NON DEVE memorizzare alcuna parte di questa risposta o della richiesta che l’ha provocata. Questa direttiva si applica sia alle cache non condivise che a quelle condivise. “NON DEVE memorizzare” in questo contesto significa che la cache NON DEVE memorizzare intenzionalmente le informazioni nella memoria non volatile e DEVE fare il tentativo migliore per rimuovere le informazioni dalla memoria volatile il prima ansible dopo l’inoltro. Anche quando questa direttiva è associata a una risposta, gli utenti possono memorizzare esplicitamente tale risposta al di fuori del sistema di memorizzazione nella cache (ad esempio, con una finestra di dialogo “Salva con nome”). I buffer di cronologia POSSONO memorizzare tali risposte come parte del loro normale funzionamento. Lo scopo di questa direttiva è quello di soddisfare i requisiti dichiarati di determinati utenti e autori di servizi che sono preoccupati dalle versioni accidentali di informazioni tramite accessi non previsti alle strutture di dati della cache. Mentre l’uso di questa direttiva potrebbe migliorare la privacy in alcuni casi, avvertiamo che NON è in alcun modo un meccanismo affidabile o sufficiente per garantire la privacy. In particolare, le cache dannose o compromesse potrebbero non riconoscere o obbedire a questa direttiva e le reti di comunicazione potrebbero essere vulnerabili alle intercettazioni.

Se si desidera impedire tutta la memorizzazione nella cache (ad esempio forzare una ricarica quando si utilizza il pulsante Indietro) è necessario:

  • no-cache per IE

  • no-store per Firefox

Ecco le mie informazioni su questo qui:

http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/

il no-store non dovrebbe essere necessario in situazioni normali e può impedire l’usabilità se i browser effettivamente seguono le specifiche come scritte. È destinato all’uso laddove la risposta HTTP contiene informazioni così sensibili che non dovrebbe mai essere scritta su una cache del disco, anche se questo influenza la velocità e la funzionalità del browser.

Come funziona:

  • Normalmente, anche se un agente utente come un browser determina che una risposta è non memorizzabile, può ancora memorizzarla nella cache del disco per motivi interni al programma utente. Può ancora essere utilizzato per funzioni come “visualizza sorgente”, “indietro”, “informazioni sulla pagina” e così via, in cui l’utente non ha necessariamente richiesto nuovamente la pagina, ma il browser non la considera una nuova visualizzazione di pagina .

  • L’uso di no-store impedirà che ciò accada, ma potrebbe avere un impatto sulla capacità del browser di fornire “view source”, “back”, “page information” e così via senza fare una nuova richiesta per il server, il che è indesiderabile. In altre parole, l’utente può provare a visualizzare la fonte e se il browser non la tiene in memoria, gli verrà detto che questo non è ansible o provocherà una nuova richiesta al server. Pertanto, il no-store deve essere utilizzato solo quando l’esperienza utente impedita di queste funzionalità non funziona correttamente o rapidamente è superata dall’importanza di garantire che il contenuto non sia archiviato nella cache.

La mia attuale comprensione è che è solo per il server cache intermedio. Anche se “no-cache” è in risposta, il server cache intermedio può ancora salvare il contenuto nella memoria non volatile.

Questo non è corretto I server di cache intermedia che seguono la specifica HTTP 1.1 obbediranno alle istruzioni no-cache e must-revalidate (o proxy-revalidate), assicurando che il contenuto non sia memorizzato nella cache. L’utilizzo di queste due istruzioni assicurerà che la risposta non venga memorizzata nella cache da alcuna cache intermedia e che tutte le richieste successive vengano inviate al server di origine

Se il server cache intermedio non supporta HTTP 1.1, sarà necessario utilizzare Pragma: no-cache e sperare per il meglio. Si noti che se non supporta HTTP 1.1, il no-store è comunque irrilevante.

Se un sistema di memorizzazione nella cache implementa correttamente no-store, non è necessario disporre di no-cache. Ma non tutti lo fanno. Inoltre, alcuni browser implementano no-cache come se fosse no-store. Pertanto, anche se non strettamente richiesto, è probabilmente più sicuro includerli entrambi.

Notare che Internet Explorer dalla versione 5 fino alla 8 genererà un errore quando si tenta di scaricare un file servito tramite https e il server che invia Cache-Control: no-cache o Pragma: no-cache headers.

Vedi http://support.microsoft.com/kb/812935/en-us

L’uso di Cache-Control: no-store e Pragma: private sembra essere la cosa più vicina che funziona ancora.

Per chrome, no-cache viene utilizzato per ricaricare la pagina durante una nuova visita, ma continua a memorizzarla nella cache se si torna indietro nella cronologia (pulsante Indietro). Per ricaricare la pagina anche per la cronologia, usa no-store. È necessario che l’IE debba essere ripristinato per funzionare in tutte le occasioni.

Quindi, per essere sicuri di evitare tutti i bug e le interpretazioni errate che uso sempre

 Cache-Control: no-store, no-cache, must-revalidate 

se voglio assicurarmi che si ricarichi.

Originariamente abbiamo usato no-cache molti anni fa e abbiamo incontrato alcuni problemi con contenuti obsoleti con alcuni browser … Non ricordo le specifiche purtroppo.

Da allora ci eravamo stabiliti con l’uso del no-store. Non ho mai guardato indietro o avuto un singolo problema con contenuti obsoleti da qualsiasi browser o intermediario da allora.

Questo spazio è certamente dominato dalla realtà delle implementazioni rispetto a ciò che accade essere stato scritto in vari RFC. In particolare, molti delegati tendono a pensare che facciano un lavoro migliore di “miglioramento delle prestazioni” sostituendo la politica che dovrebbero seguire con la propria.

Solo per rendere le cose ancora peggiori, in alcune situazioni, la no-cache non può essere utilizzata, ma nessun negozio può:

http://faindu.wordpress.com/2008/04/18/ie7-ssl-xml-flex-error-2032-stream-error/