Disseram-me para impedir o vazamento de informações do usuário, apenas "sem cache" em resposta não é suficiente. "no-store" também é necessário.
Cache-Control: no-cache, no-store
Depois de ler esta especificação http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html , ainda não sei bem o porquê.
Meu entendimento atual é que é apenas para servidor de cache intermediário. Mesmo se "sem cache" estiver em resposta, o servidor de cache intermediário ainda poderá salvar o conteúdo em armazenamento não volátil. O servidor de cache intermediário decidirá se está usando o conteúdo salvo para a solicitação a seguir. No entanto, se "no-store" estiver na resposta, o servidor de cache intermediário não deve armazenar o conteúdo. Então, é mais seguro.
Existe alguma outra razão pela qual precisamos de "no-cache" e "no-store"?
no-cache
não significa o que você pensa que faz. Na verdade, significa "revalidar".Respostas:
Devo esclarecer que
no-cache
não significa não armazenar em cache . De fato, significa "revalidar com o servidor" antes de usar qualquer resposta em cache que você possa ter, a cada solicitação.must-revalidate
, por outro lado, só precisa revalidar quando o recurso é considerado obsoleto.Se o servidor disser que o recurso ainda é válido, o cache poderá responder com sua representação, aliviando a necessidade de o servidor reenviar todo o recurso.
no-store
é efetivamente a diretiva full do não cache e visa impedir o armazenamento da representação em qualquer forma de cache.Eu digo tudo, mas observe isso na especificação HTTP RFC 2616:
Mas isso é omitido da especificação HTTP RFC 7234 mais recente em uma tentativa potencial de tornar
no-store
mais forte, consulte:http://tools.ietf.org/html/rfc7234#section-5.2.1.5
fonte
Cache-Control: no-store
suficiente?no-store
e descreveno-cache
como se não fizesse cache nenhum ... Estou confuso!Sob certas circunstâncias, o IE6 ainda armazenará em cache os arquivos, mesmo quando
Cache-Control: no-cache
estiver nos cabeçalhos de resposta.O W3C declara
no-cache
:No meu aplicativo, se você visitasse uma página com o
no-cache
cabeçalho, desconectasse e depois retornasse ao seu navegador, o IE6 ainda pegaria a página do cache (sem uma nova solicitação / validação para o servidor). Adicionando nono-store
cabeçalho parou de fazê-lo. Mas se você aceitar o W3C, não há realmente nenhuma maneira de controlar esse comportamento:As diferenças gerais entre o histórico do navegador e o cache HTTP normal são descritas em uma subseção específica da especificação .
fonte
no-store
também. Caso contrário, o Chrome mostrará dados armazenados em cache / em buffer ao usar o botão Voltar.no-cache
cabeçalho. A citação do W3C imediatamente abaixo deixa claro que esse não é o caso; em vez disso, ono-cache
cabeçalho significa apenas que a resposta deve ser revalidada antes de ser reutilizada para atender solicitações subsequentes.Na especificação HTTP 1.1 :
fonte
no-cache
emax-age=0
diga que o item deve ser considerado obsoleto. Isso significa que ele deve ser revalidado antes de ser veiculado. Isso significa que um cache pode armazenar o arquivo e executar uma solicitação condicional à qual o servidor pode responder304 NOT MODIFIED
. Obviamente, essa é uma grande vantagem, pois o corpo da resposta não precisa ser gerado e enviado. Então, para tirar proveito desta muitos (a maioria?) Caches irá armazenarno-cache
respostas.Se você deseja impedir todo o armazenamento em cache (por exemplo, forçar uma recarga ao usar o botão Voltar), é necessário:
sem cache para o IE
sem loja para Firefox
Aqui estão minhas informações sobre isso:
http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/
fonte
no-store
não deve ser necessário em situações normais e pode prejudicar a velocidade e a usabilidade. Destina-se ao uso em que a resposta HTTP contém informações tão sensíveis que nunca devem ser gravadas em um cache de disco, independentemente dos efeitos negativos criados para o usuário.Como funciona:
Normalmente, mesmo que um agente do usuário, como um navegador, determine que uma resposta não deve ser armazenada em cache, ele ainda poderá armazená-la no cache do disco por razões internas ao agente do usuário. Essa versão pode ser utilizada para recursos como "visualizar fonte", "voltar", "informações da página" etc., onde o usuário não solicitou a página necessariamente novamente, mas o navegador não a considera uma nova visualização da página e faria sentido exibir a mesma versão que o usuário está visualizando no momento.
O uso
no-store
impedirá que essa resposta seja armazenada, mas isso pode afetar a capacidade do navegador de fornecer "fonte de visualização", "voltar", "informações da página" e assim por diante, sem fazer uma nova solicitação separada para o servidor, o que é indesejável. Em outras palavras, o usuário pode tentar visualizar a fonte e, se o navegador não a mantiver na memória, será informado que isso não é possível ou causará uma nova solicitação ao servidor. Portanto,no-store
só deve ser usado quando a experiência do usuário prejudicada desses recursos não funcionar corretamente ou rapidamente for superada pela importância de garantir que o conteúdo não seja armazenado no cache.Isto está incorreto. Servidores de cache intermediários compatíveis com HTTP 1.1 obedecerão às instruções
no-cache
emust-revalidate
, garantindo que o conteúdo não seja armazenado em cache. O uso dessas instruções garantirá que a resposta não seja armazenada em cache por nenhum cache intermediário e que todas as solicitações subsequentes sejam enviadas de volta ao servidor de origem.Se o servidor de cache intermediário não suportar HTTP 1.1, será necessário usar
Pragma: no-cache
e esperar o melhor. Observe que, se ele não suporta HTTP 1.1,no-store
é irrelevante de qualquer maneira.fonte
no-cache
mantém uma atualização rígida sem sacrificar todos os benefícios do armazenamento em cache, o que significa que o cache é armazenado e usado novamente se o servidor responder com 304 Não Modificado.Se um sistema de cache implementa corretamente o no-store, você não precisaria do no-cache. Mas nem todos fazem. Além disso, alguns navegadores implementam nenhum cache como se fosse no-store. Portanto, embora não seja estritamente necessário, é provavelmente mais seguro incluir os dois.
fonte
Observe que o Internet Explorer da versão 5 até 8 lançará um erro ao tentar baixar um arquivo veiculado via https e o envio
Cache-Control: no-cache
ouPragma: no-cache
cabeçalhos do servidor .Consulte http://support.microsoft.com/kb/812935/en-us
O uso de
Cache-Control: no-store
ePragma: private
parece ser a coisa mais próxima que ainda funciona.fonte
Cache-Control: no-store, no-cache, must-revalidate
nessa ordem exata para fazê-lo funcionar. No entanto, isso não funcionou em nosso cenário, mas o que @bassim sugeriu acima fez. Obrigado!Para o chrome, nenhum cache é usado para recarregar a página em uma nova visita, mas ainda a armazena em cache se você voltar ao histórico (botão voltar). Para recarregar a página também para o histórico, use no-store. O IE precisa revalidar para funcionar em todas as ocasiões.
Então, para ter certeza de evitar todos os erros e interpretações erradas que eu sempre uso
se eu quiser ter certeza de que ele é recarregado.
fonte
Originalmente, usamos o sem cache há muitos anos e tivemos alguns problemas com conteúdo obsoleto em determinados navegadores ... Infelizmente, não lembro das especificações.
Desde então, decidimos APENAS o uso de nenhuma loja. Nunca olhou para trás ou teve um único problema com o conteúdo obsoleto de qualquer navegador ou intermediários desde então.
Esse espaço é certamente dominado pela realidade das implementações versus o que foi escrito em várias RFCs. Muitos proxies em particular tendem a pensar que fazem um trabalho melhor de "melhorar o desempenho", substituindo a política que deveriam seguir pela sua.
fonte
no-store
.Apenas para piorar as coisas, em algumas situações, o cache não pode ser usado, mas o no-store pode:
http://faindu.wordpress.com/2008/04/18/ie7-ssl-xml-flex-error-2032-stream-error/
fonte
OWASP discute isso:
Fonte aqui .
fonte
no-cache
diz que você não pode usá-lo sem validar com o servidor. Se sua cópia em cache ainda estiver boa, o servidor responderá com um 304 e você usará sua cópia em cache. Economiza um download de rede potencialmente grande.no-store
por outro lado, diz que você não tem permissão para armazenar em cache os dados.