4

Довольно странно.

В моем веб-приложении есть ссылка на электронную таблицу, которая хранится в S3. Я загрузил этот файл раньше. Теперь я обновил этот файл в s3.

Когда я пытаюсь загрузить его снова по той же ссылке, я все равно получаю предыдущую версию.

Если я очищу кеш, то скачаю более новую версию ...

3 ответа3

2

У вас есть два варианта решения этой проблемы:

  1. Вы можете указать Amazon, как установить заголовок Cache-Control при получении вашего URL. Точно так же, как вы указываете заголовок Content-Type , вы можете контролировать и другие заголовки. Вы можете уменьшить кеширование до гораздо более короткого интервала времени.

  2. Вы можете управлять кэшированием веб-страницы, которая ссылается на файл на S3, и изменять ссылку на файл S3, чтобы его содержимое не использовалось из кэша при изменении файла. В принципе, вы можете просто положить ?version=1 в конце URL. Если вы измените это на ?version=2 (и т. д.), браузер не будет использовать кэшированную версию файла, потому что URL не будет точно совпадать.

Этот второй метод позволяет вам использовать агрессивное кэширование в файле S3 и избежать ненужных передач. Но это требует, чтобы вы изменяли каждую веб-страницу, которая ссылается на файл, каждый раз, когда вы изменяете содержимое файла.

См. Раздел « Снижение счета за Amazon S3» для получения дополнительной информации по обоим методам, хотя вы пытаетесь получить противоположный эффект.

1

Да, это так. У меня та же проблема, даже если я не использую S3 в качестве хранилища. У меня есть приложение Symfony2, которое загружает содержимое локального файла. URL всегда один и тот же, потому что я получаю содержимое файла в PHP и отправляю его в браузер. Если я изменю содержимое локального файла, Firefox и IE получат последнюю версию файла, НО Chrome не будет. Я пытался установить заголовки управления кэшем, но это бесполезно, Chrome просто игнорирует их.

Некоторая идея заголовков, которые я использую:

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

Если я добавлю случайный номер версии в URL (?version = randomIntByTime) Chrome, наконец, сохранит последнюю версию файла. Это расстраивает писать дополнительный код для Chrome.

0

Нет, но возможно, что между вами и S3 есть другое кеширующее устройство. Например, ISA-сервер Microsoft, который кэширует веб-трафик, и я видел, как он делал подобные вещи много раз.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .