É o nome do arquivo ou todo o URL usado como uma chave em caches do navegador?
-
01-07-2019 - |
Pergunta
É comum querer navegadores para recursos de cache -. JavaScript, CSS, imagens, etc., até que haja uma nova versão disponível, e em seguida, garantir que as buscas do navegador e armazena em cache a nova versão em vez
Uma solução é incorporar um número de versão no nome do arquivo do recurso, mas irá colocar os recursos a serem gerenciados dessa forma em um diretório com um número de revisão no que fazer a mesma coisa? É toda a URL para o arquivo usado como uma chave no cache do navegador, ou é apenas o próprio nome de arquivo e alguns meta-dados?
Se minhas alterações de código de buscar /r20/example.js
para /r21/example.js
, posso ter certeza de que a revisão 20 de example.js
foi armazenada em cache, mas agora revisão 21 tem sido buscada vez e agora está em cache?
Solução
Sim, qualquer alteração no qualquer parte do URL (excluindo protocolos HTTP e HTTPS muda) é interpretado como um recurso diferente pelo navegador (e quaisquer proxies intermediários), e, assim, resultar em uma entidade separada no navegador-cache.
Update:
O pedido em este artigo ThinkVitamin que o Opera e Safari / Webkit navegadores não URLs de cache com? query = cordas é false .
Adicionando um parâmetro de número de versão para um URL é uma maneira perfeitamente aceitável para fazer de impedimento de cache.
O que pode ter confundido o autor do artigo ThinkVitamin é o fato de que pressionar Enter na barra de endereço / localização no Safari e Opera resulta em um comportamento diferente para URLs com string de consulta em si.
No entanto, ( e esta é a parte mais importante! ) Opera e Safari se comportam exatamente como IE e Firefox quando vem ao cache incorporado / imagens vinculadas e folhas de estilo e scripts em páginas da web - "?", independentemente de terem ou não caracteres em suas URLs. (Isto pode ser verificado com um simples teste em um servidor normal de Apache.)
(eu teria comentado sobre a resposta atualmente aceita se eu tinha a reputação de fazê-lo: -).
Outras dicas
chave de cache do navegador é uma combinação do método de solicitação e de recursos URI. URI consiste de esquema, autoridade, caminho, consulta e fragmento.
trecho relevante de HTTP especificação 1.1 :
A chave cache principal consiste no método de solicitação e alvo URI. No entanto, uma vez HTTP caches em uso comum hoje em dia são tipicamente limitadas a cache de respostas para obter, muitas caches simplesmente recusar outros métodos e usar apenas o URI como a chave de cache primário.
trecho relevante de URI especificação :
A sintaxe URI genérico consiste em uma seqüência hierárquica de componentes referidos como o esquema, autoridade, caminho, consulta e fragmento.
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty
Estou 99,99999% de certeza que é toda a url que é usado para recursos de cache em um navegador, para que o seu esquema de URL deve funcionar muito bem.
O mínimo que você precisa para identificar um objeto HTTP é pelo caminho completo, incluindo todos os parâmetros de consulta cordas. Alguns navegadores podem não cache de objetos com um string de consulta, mas que não tem nada a ver com a chave para o cache.
Também é importante lembrar que o caminho não é mais suficiente. O Vary:. Cabeçalho nos alertas de resposta HTTP do navegador (ou servidor proxy, etc.) de qualquer coisa que não seja o URL que deve ser usado para determinar a chave de cache, tais como cookies, valores que codificam, etc
Para a sua pergunta básica, sim, mudar a URL do arquivo .js é sufficent. A questão maior do que determina a chave de cache, é o URL mais o Vary:. Restrições de cabeçalho
Sim. Um caminho diferente é o mesmo a partir da perspectiva caches.
É claro que tem que usar o caminho inteiro '/r20/example.js' vs '/r21/example.js' poderia ser completamente diferentes imagens para começar. O que você sugere é uma maneira viável de controle de versão alça.
Na maioria dos navegadores é usada a URL completa. Em alguns navegadores, se você tem uma consulta no URL, o documento nunca será armazenada em cache.
url inteira. Eu vi um comportamento estranho em alguns navegadores mais antigos, onde a sensibilidade caso entrou em jogo.
Além das respostas existentes Eu só quero acrescentar que talvez não se aplicam se você usar ServiceWorkers ou por exemplo desligada-plugin. Então você pode experimentar regras de cache diferentes, dependendo de como as ServiceWorkers são criadas.
depende. que é suposto ser o URL completo, mas alguns navegadores (Opera, Safari 2 ) aplicar uma estratégia de cache diferente para urls com diferentes parâmetros.
melhor aposta é a de mudar o nome do arquivo .
Há uma solução muito inteligente aqui (usa PHP, Apache)
http://verens.com/archives/ 2008/04/09 / javascript-cache-resolvido de problemas /
Notas Estratégia: “De acordo com a letra da especificação HTTP caching, os agentes deveriam nunca URLs de cache com seqüências de consulta. Enquanto o Internet Explorer e Firefox ignorar este, Opera e Safari não fazer - para se certificar de todos os agentes de usuário podem armazenar em cache seus recursos, precisamos manter consulta cordas fora de seus URLs “
.http://www.thinkvitamin.com/features/webapps/serving -javascript-rápido