Queremos esconder o busto nas implantações de produção, mas não perder muito tempo tentando descobrir um sistema para isso. Meu pensamento foi aplicar um parâmetro ao final dos arquivos css e js com o número da versão atual:
<link rel="stylesheet" href="base_url.com/file.css?v=1.123"/>
Duas perguntas: isso efetivamente interromperá o cache? O parâmetro fará com que o navegador nunca armazene em cache a resposta desse URL, pois o parâmetro indica que esse é um conteúdo dinâmico?
fonte
<link rel="stylesheet" href="style.css?v=1487935578" />
Sim. Até o Stack Overflow usa esse método, embora eu lembre-se de que eles (com milhões de visitantes por dia e zilhões de diferentes versões e configurações de clientes e proxy) tiveram alguns casos extremos onde até isso não foi suficiente para interromper o cache. Mas a suposição geral é que isso funcionará e é um método adequado para interromper o armazenamento em cache nos clientes.
Não. O parâmetro não alterará a política de cache; os cabeçalhos de cache enviados pelo servidor ainda se aplicam e, se não enviar, os padrões do navegador.
fonte
/static/v22/file.css
como você poderia fazer vários arquivos com um único renomear pasta, por exemplo,/static/v23/file.css
e/static/v23/mystuff.js
É mais seguro colocar o número da versão no nome do arquivo real. Isso permite que várias versões existam ao mesmo tempo, para que você possa lançar uma nova versão e, se ainda existirem páginas HTML em cache que solicitem a versão mais antiga, elas obterão a versão que funciona com o HTML.
Observe que, em uma das maiores implantações de versão em qualquer lugar da Internet, o jQuery usa números de versão no nome do arquivo real e permite com segurança coexistir várias versões sem nenhuma lógica especial do lado do servidor (cada versão é apenas um arquivo diferente).
Isso reduz o cache uma vez quando você implanta novas páginas e novos arquivos vinculados (que é o que você deseja) e, a partir daí, essas versões podem ser efetivamente armazenadas em cache (o que você também deseja).
fonte
Como já foi dito, o bloqueio de cache com um parâmetro de consulta geralmente é considerado uma má ideia (tm) e existe há muito tempo. É melhor refletir a versão no nome do arquivo. O Boilerplate Html5 recomenda não usar a string de consulta, entre outros.
Dito isto, das recomendações que vi que citaram uma fonte, todas parecem ter sua sabedoria em um artigo de 2008 de Steve Souders. Suas conclusões são baseadas no comportamento dos proxies na época e podem ou não ser relevantes atualmente. Ainda assim, na ausência de informações mais atuais, alterar o nome do arquivo é a opção segura.
fonte
Ele travará o cache uma vez, depois que o cliente tiver baixado o recurso, todas as outras respostas serão veiculadas no cache do cliente, a menos que:
fonte
Em geral, isso deve ser bom, mas é possível que isso não funcione se houver um cache intermediário (um proxy) configurado para ignorar os parâmetros de solicitação.
Por exemplo, se você estiver fornecendo conteúdo estático através do Akamai CDN, ele poderá ser configurado para ignorar os parâmetros de solicitação para impedir o bloqueio do cache usando esse método.
fonte
Depende muito de quão robusto você deseja que seu cache seja. Por exemplo, o servidor proxy squid (e possivelmente outros) assume como padrão não armazenar em cache URLs veiculadas com uma string de consulta - pelo menos quando o artigo foi escrito. Se você não se importa com certos casos de uso que causam falhas desnecessárias no cache, vá em frente com parâmetros de consulta. Mas é muito fácil configurar um esquema de bloqueio de cache baseado em nome de arquivo que evita esse problema.
fonte
Encontrei uma comparação das 2 técnicas (string de consulta vs nome do arquivo) aqui :
A versão como uma querystring tem dois problemas.
fonte
Outra abordagem semelhante é usar o htaccess mod_rewrite para ignorar parte do caminho ao servir os arquivos. Sua página de índice nunca armazenada em cache faz referência ao caminho mais recente para os arquivos.
Do ponto de vista do desenvolvimento, é tão fácil quanto usar parâmetros para o número da versão, mas é tão robusto quanto a abordagem do nome do arquivo.
Use a parte ignorada do caminho para o número da versão e o servidor apenas o ignora e serve o arquivo não armazenado em cache.
1.2.3/css/styles.css
serve o mesmo arquivocss/styles.css
desde que o primeiro diretório é removido e ignorado pelo arquivo htaccessIncluindo arquivos com versão
Observe que essa abordagem significa que você precisa desativar o cache da sua página de índice - Usando as tags <meta> para desativar o cache em todos os navegadores?
arquivo .htaccess
Você pode adotar a mesma abordagem em qualquer plataforma de servidor que permita a reescrita de URL
(condição de reescrita adaptada do mod_rewrite - reescreva o diretório para a string de consulta, exceto / #! / )
... e se você precisar interromper o cache do ponto de entrada da página de índice / site, sempre poderá usar o JavaSript para atualizá-lo.
fonte
fonte
fonte
Espero que isso ajude você a injetar um arquivo JS externo
Fonte - Código Cachebuster em JavaScript
fonte