O cabeçalho Cache-Control: max-age=0
implica que o conteúdo é considerado obsoleto (e deve ser buscado novamente) imediatamente, o que é efetivamente o mesmo que Cache-Control: no-cache
.
http
caching
http-headers
rubyruy
fonte
fonte
Respostas:
Eu tive a mesma pergunta e encontrei algumas informações em minhas pesquisas (sua pergunta surgiu como um dos resultados). Aqui está o que eu determinei ...
Existem dois lados no
Cache-Control
cabeçalho. Um lado é para onde pode ser enviado pelo servidor da web (também conhecido como "servidor de origem"). O outro lado é para onde ele pode ser enviado pelo navegador (também conhecido como "user agent").Quando enviado pelo servidor de origem
Eu acredito que
max-age=0
simplesmente informa aos caches (e agentes do usuário) que a resposta é obsoleta desde o início e, portanto, eles DEVEM revalidar a resposta (por exemplo, com oIf-Not-Modified
cabeçalho) antes de usar uma cópia em cache, ao passo queno-cache
lhes diz que DEVEM revalidar antes de usar um cache. cópia de. De 14.9.1 O que é cache :Em outras palavras, os caches às vezes podem optar por usar uma resposta obsoleta (embora eu acredite que eles precisam adicionar um
Warning
cabeçalho), masno-cache
dizem que eles não têm permissão para usar uma resposta obsoleta, não importa o quê. Talvez você deseja que o DEVE comportamento -revalidate quando estatísticas de beisebol são gerados em uma página, mas você iria querer a MUST comportamento -revalidate quando você gerou a resposta a uma compra e-commerce.Embora você esteja correto em seu comentário quando diz que
no-cache
não deve impedir o armazenamento, pode ser outra diferença ao usá-lono-cache
. Me deparei com uma página, Diretivas de Controle de Cache Desmistificadas , que diz (não posso garantir sua correção):Como um aparte, parece-me que
Cache-Control: max-age=0, must-revalidate
deveria significar basicamente a mesma coisa queCache-Control: no-cache
. Então, talvez essa seja uma maneira de obter o comportamento de validação DEVEno-cache
, evitando a migração aparente deno-cache
para fazer a mesma coisa queno-store
(ou seja, sem armazenamento em cache)?Quando enviado pelo agente do usuário
Acredito que a resposta de shahkalpesh se aplica ao lado do agente do usuário. Você também pode ver 13.2.6 Desambiguando várias respostas .
Se um agente do usuário envia uma solicitação com
Cache-Control: max-age=0
(também conhecida como "revalidação de ponta a ponta"), cada cache ao longo do caminho revalidará sua entrada de cache (por exemplo, com oIf-Not-Modified
cabeçalho) até o servidor de origem. Se a resposta for 304 (Não Modificado), a entidade em cache poderá ser usada.Por outro lado, o envio de uma solicitação com
Cache-Control: no-cache
(também conhecido como "recarga de ponta a ponta") não revalida e o servidor NÃO DEVE usar uma cópia em cache ao responder.fonte
must-revalidate
NÃO pretende ser o mesmo queno-cache
ouno-store
. O último ignora completamente os caches, mas o primeiro apenas diz que um cache deve sempre ser verificado quanto à atualização, mas, se ainda estiver atual, poderá ser usado, economizando largura de banda. O último força downloads completos de ponta a ponta o tempo todo, ocupando largura de banda desnecessária e atrasando as respostas.no-cache
não "ignora completamente os caches" nem "força downloads completos de ponta a ponta o tempo todo", pelo menos não em todos os navegadores. A especificação diz apenas que o navegador deve validar o cache.idade máxima = 0
Isso equivale a clicar em Atualizar , o que significa fornecer a cópia mais recente, a menos que eu já possua a cópia mais recente.
sem cache
Isso pressiona Shift enquanto clica em Atualizar, o que significa que apenas refaça tudo, não importa o quê.
fonte
no-store
Pergunta antiga agora, mas se alguém encontrar isso através de uma pesquisa como eu, parece que o IE9 fará uso disso para configurar o comportamento dos recursos ao usar os botões voltar e avançar. Quando max-age = 0 é usado, o navegador usa a última versão ao visualizar um recurso em uma imprensa para trás / para frente. Se nenhum cache for usado, o recurso será recuperado.
Mais detalhes sobre o cache do IE9 podem ser vistos nesta postagem do blog em cache do msdn .
fonte
Nos meus testes recentes com o IE8 e Firefox 3.5, parece que ambos são compatíveis com RFC. No entanto, eles diferem em sua "simpatia" com o servidor de origem. O IE8 trata as
no-cache
respostas com a mesma semântica quemax-age=0,must-revalidate
. O Firefox 3.5, no entanto, parece tratarno-cache
como equivalente ano-store
, o que é péssimo para desempenho e uso de largura de banda.O Squid Cache, por padrão, parece nunca armazenar nada com um
no-cache
cabeçalho, assim como o Firefox.Meu conselho seria definir
public,max-age=0
recursos não confidenciais que você deseja verificar em cada solicitação, mas ainda permitir os benefícios de desempenho e largura de banda do armazenamento em cache. Para itens por usuário com a mesma consideração, useprivate,max-age=0
.Eu evitaria o uso de
no-cache
inteiramente, pois parece que ele foi bastardizado por alguns navegadores e caches populares para o equivalente funcional deno-store
.Além disso, não emule Akamai e Limelight. Embora eles basicamente executem matrizes de cache em massa como seu principal negócio, e devam ser especialistas, eles realmente têm interesse em fazer com que mais dados sejam baixados de suas redes. O Google também pode não ser uma boa opção para emulação. Eles parecem usar
max-age=0
ouno-cache
aleatoriamente, dependendo do recurso.fonte
private,max-age=0
.cortesia: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4
Não aceite isso como resposta - vou ter que lê-lo para entender o verdadeiro uso dele :)
fonte
Não sou especialista em cache, mas Mark Nottingham é. Aqui estão os documentos de cache dele . Ele também tem excelentes links na seção Referências.
Com base na minha leitura desses documentos, parece que
max-age=0
poderia permitir que o cache enviasse uma resposta em cache a solicitações que chegavam no "mesmo tempo" em que "mesmo tempo" significa que, juntas o suficiente, parecem simultâneas ao cache, masno-cache
não .fonte
A propósito, vale a pena notar que alguns dispositivos móveis, particularmente produtos da Apple como iPhone / iPad, ignoram completamente cabeçalhos como no-cache, no-store, Expira em: 0 ou qualquer outra coisa que você possa tentar forçá-los a não reutilizar o prazo de validade páginas de formulário.
Isso não causou dores de cabeça ao tentarmos dizer o problema do iPad de um usuário, ficar adormecido em uma página que ele alcançou através de um processo de formulário, por exemplo, etapa 2 de 3 e, em seguida, o dispositivo ignora totalmente a loja / diretivas de cache, e até onde eu sei, simplesmente tira o que é um instantâneo virtual da página de seu último estado, ou seja, ignorando o que foi dito explicitamente e, não apenas isso, obtendo uma página que não deve ser armazenada e armazená-lo sem realmente checá-lo novamente, o que leva a todos os tipos de problemas de sessão estranhos, entre outras coisas.
Estou apenas adicionando isso no caso de alguém aparecer e não conseguir descobrir por que eles estão recebendo erros de sessão, principalmente com iphones e ipads, que parecem de longe os piores criminosos nessa área.
Eu fiz testes de depurador bastante extensos com esse problema e esta é minha conclusão: os dispositivos ignoram essas diretivas completamente.
Mesmo em uso regular, descobri que alguns celulares também falham totalmente em procurar novas versões, digamos, Expira em: 0 e depois checam as datas da última modificação para determinar se deve obter uma nova.
Isso simplesmente não acontece, então o que eu fui forçado a fazer foi adicionar strings de consulta aos arquivos css / js nos quais eu precisava forçar atualizações, o que faz com que os dispositivos móveis estúpidos pensem que é um arquivo que não possui, como: .css? v = 1 e v = 2 para uma atualização css / js. Isso funciona em grande parte.
Os navegadores de usuários também, a propósito, se deixados com os padrões, a partir de 2016, como descubro continuamente (fazemos muitas alterações e atualizações em nosso site) também não conseguem verificar as datas da última modificação desses arquivos, mas a consulta O método string corrige esse problema. Isso é algo que eu notei com clientes e pessoas do escritório que tendem a usar padrões normais básicos de usuário em seus navegadores e não têm conhecimento de problemas de cache com css / js etc. o que significa que os padrões para seus navegadores, principalmente o MSIE / Firefox, não estão fazendo o que lhes é pedido, ignoram as alterações e ignoram as datas da última modificação e não são validados, mesmo com Expires: 0 definido explicitamente.
Esse foi um bom tópico com muitas informações técnicas boas, mas também é importante observar o quão ruim é o suporte para esse material em dispositivos móveis. A cada poucos meses, tenho que adicionar mais camadas de proteção contra sua falha para seguir os comandos do cabeçalho que eles recebem ou para interceptar adequadamente esses comandos.
fonte
Uma coisa que (surpreendentemente) não foi mencionada é que uma solicitação pode indicar explicitamente que aceitará dados obsoletos, usando a
max-stale
diretiva. Nesse caso, se o servidor respondeumax-age=0
, o cache consideraria a resposta obsoleta e estaria livre para usá-la para satisfazer a solicitação do cliente [que solicitou dados potencialmente obsoletos]. Por outro lado, se o servidor enviano-cache
isso realmente supera qualquer solicitação do cliente (commax-stale
) por dados antigos, como o cache DEVE revalidar.fonte
A diferença é que nenhum cache (sem armazenamento no Firefox) impede qualquer tipo de cache. Isso pode ser útil para impedir que páginas com conteúdo seguro sejam gravadas em disco e para páginas que sempre devem ser atualizadas, mesmo que sejam visitadas novamente com o botão Voltar.
max-age = 0 indica que uma entrada de cache é obsoleta e requer nova validação, mas não impede o armazenamento em cache. Geralmente, os navegadores validam os recursos apenas uma vez por sessão do navegador, portanto, o conteúdo pode não ser atualizado até que o site seja visitado em uma nova sessão.
Geralmente, os navegadores não excluem entradas de cache expiradas, a menos que estejam recuperando espaço para conteúdo mais recente quando o cache do navegador estiver cheio. Usando no-store, no-cache permite que uma entrada de cache seja excluída explicitamente.
fonte
max-age=0
se você quer dizer que o cache é permitido, mas o recurso deve ser revalidado eno-store
se você não deseja que a resposta seja armazenada no cache. Ono-cache
é aleatoriamente designado para significar qualquer um deles, dependendo do fornecedor do agente do usuário e do número da versão e protocolo de transferência.