O Chrome armazena em cache um arquivo baixado?

4

Bastante bizarro.

Na minha webapp, tenho um link para uma planilha que é armazenada no S3. Eu baixei esse arquivo antes. Agora atualizei esse arquivo em s3.

Quando tento fazer o download novamente do mesmo link, ainda recebo a versão anterior.

Se eu limpar o cache, ele fará o download da versão mais recente ...

    
por thinkanotherone 07.10.2011 / 18:43

3 respostas

2

Você tem duas opções para contornar isso:

  1. Você pode dizer à Amazon como definir o cabeçalho Cache-Control quando seu URL for recuperado. Da mesma forma que você especifica o cabeçalho Content-Type , também é possível controlar outros cabeçalhos. Você pode transformar o cache em um intervalo de tempo muito menor.

  2. Você pode controlar o armazenamento em cache da página da Web que se vincula ao arquivo no S3 e modificar o link para o arquivo S3 para que seu conteúdo não seja usado do cache quando o arquivo for alterado. Basicamente, você pode simplesmente colocar um ?version=1 no final do URL. Se você alterar isso para ?version=2 (e assim por diante), o navegador não usará a versão em cache do arquivo porque o URL não corresponderá com precisão.

Esse segundo método permite usar o armazenamento em cache agressivo no arquivo S3 e evitar transferências desperdiçadas. Mas isso exige que você modifique todas as páginas da Web que se vinculam ao arquivo toda vez que você alterar o conteúdo do arquivo.

Veja Reduza sua fatura do Amazon S3 para mais em ambas as técnicas, embora você esteja tentando obter o efeito oposto.

    
por 07.10.2011 / 22:51
1

Sim, sim. Estou tendo o mesmo problema, mesmo se não estiver usando o S3 como armazenamento. Eu tenho um aplicativo Symfony2 que serve o conteúdo de um arquivo local para download. A url é sempre a mesma porque eu estou recebendo o conteúdo do arquivo em PHP e enviá-los para o navegador. Se eu modificar o conteúdo do arquivo local, o Firefox e o IE receberão a versão do arquivo mais recente, mas o Chrome não. Tentei definir cabeçalhos de controle de cache, mas é inútil, o Chrome os ignora.

Alguma ideia dos cabeçalhos que estou usando:

$response->headers->addCacheControlDirective('no-cache', true);
$response->headers->addCacheControlDirective('max-age', 0);
$response->headers->addCacheControlDirective('must-revalidate', true);
$response->headers->addCacheControlDirective('no-store', true);

Se eu adicionar um número de versão aleatório ao URL (? versão = randomIntByTime), o Chrome finalmente salvará a versão mais recente do arquivo. É frustrante escrever código extra para o Chrome.

    
por 13.01.2014 / 09:54
0

Não, mas é possível que haja outro dispositivo de cache entre você e o S3. Como o servidor ISA da Microsoft, que tem cache de tráfego da web e eu já vi isso acontecer muitas vezes.

    
por 07.10.2011 / 18:48