Limpa o cache local do navegador enviando cabeçalhos http?

3

Eu modifiquei arquivos js e css no meu site. Mas o navegador ainda busca o conteúdo do cache local porque o navegador o armazenou. Eu quero buscar o novo conteúdo do servidor sem limpar o cache local. Anteriormente, o cabeçalho max-age era definido como 1 ano. Agora eu configurei para 0. Ainda assim, ele não busca conteúdo novo.

Existe alguma maneira de enviar cabeçalhos do servidor para o navegador e ele buscará novos conteúdos, ignorando os arquivos anteriores armazenados no cache local.

Obrigado

    
por linux404 02.12.2017 / 08:49

2 respostas

0

Envie Cache-control: no-cache para informar aos navegadores receptores para liberar uma entrada de cache. Isso tem que ser enviado para cada objeto no cache, então é melhor fazer isso com um script.

    
por 02.12.2017 / 09:52
0

Se o navegador armazenou o recurso em cache, com um tempo não expirado, não há como forçá-lo a recarregar o ativo. Isso é exatamente o que é o armazenamento em cache - uma instrução de que é seguro usar o recurso durante esse período de tempo.

Você não pode simplesmente adicionar os cabeçalhos de armazenamento em cache e esperar que os navegadores que já baixaram esse recurso selecionem esses novos cabeçalhos - eles não farão o download do arquivo enquanto tiverem uma versão em cache válida! A única exceção a isso é se o usuário fizer um recarregamento (F5 no Chrome) ou forçar o recarregamento (Ctrl + F5 no Chrome).

Existem vários tipos e técnicas de burst de cache , que envolvem a alteração da referência do ativo (por exemplo, você atualiza sua página de referenciando main.css para main_v2.css ou main.css? versão = 2). Isso depende da página que não está sendo armazenada em cache. Pessoalmente, acho que isso é um desperdício (quantas pessoas começam na página inicial, depois clicam em uma página, depois voltam para a home page e exigem pelo menos uma revalidação 304?), Então prefiro ainda armazenar as páginas em cache, mas com um expiração curta, mas isso é outro problema.

A resposta para tudo isso parece ser usar o cabeçalho must-revalidate , mas uma estratégia de cache bem-sucedida é tanto evitar a necessidade de baixar novamente um ativo que pode ser armazenado em cache, mas também impedir que ele seja verificado. Essas chamadas de verificação (que resultam em uma resposta “304 Não Modificada”, em vez de um download completo, se o arquivo continuar igual no servidor) levam um bom tempo, especialmente se houver muitos ativos na página. usá-los apenas resolve metade do problema - melhor armazenar em cache completamente por um determinado período de tempo e, em seguida, usar 304s para revalidar após esse período.

Uma opção de controle de cache muito mais interessante é stale-while-revalidate , que permite, por exemplo, armazenar em cache um ativo por 1 hora, mas reutilizá-lo por mais 2 horas, enquanto o navegador o revalida em segundo plano para a próxima vez. Isso, portanto, fornece um mecanismo de revalidação e atualização sem a penalidade de desempenho da verificação antecipada de cada vez. No entanto, não há suporte a navegadores neste momento (por meio do Chrome e Firefox olhou para ele).

Por fim, um comentário sobre sua pergunta sugere o uso de HTTP / 2 para enviar o novo recurso. Isso é bom em teoria, mas HTTP / 2 push não funciona assim ( embora tenha sido sugerido que talvez devesse - precisamente por esse motivo). Em vez disso, o HTTP / 2 push mantém seu próprio "push cache" e, em seguida, o navegador carrega itens em seu "cache principal" quando necessário. Mas ele sempre verifica primeiro o "cache principal" e não verifica o "cache de envio", a menos que não exista lá. Portanto, é basicamente uma ordem de prioridade de "cache principal", "cache de envio", "servidor" e o primeiro hit válido é usado.

    
por 03.12.2017 / 11:34