Запрет частичного кеширования веб-ресурсов - PullRequest
1 голос
/ 17 декабря 2010

У меня есть веб-страница с ресурсом по постоянно меняющемуся адресу. Например, веб-страница может быть по адресу http_: //www.mysite.com/? Page = page1 и может содержать изображение http_: //www.mysite.com/? Img = image999. Хотя оба ресурса находятся на моем сайте, я не контролирую размещение определенных изображений на определенных страницах.

Я установил заголовки для длительного кэширования на страницах, а также на изображениях. Но в случае, если пользовательский агент кэширует только веб-страницы, а не изображения (или, например, пользователь очищает кэш, а изображение очищается из кеша), пользовательский агент извлекает страницу из кеша и делает запрос для /? Img = image999. Однако в этот момент изображение больше не находится в /? Image = image999, а вместо этого, скажем, /? Image = image998. Таким образом, изображение не будет отображаться пользователю.

Каково решение этой проблемы? Вот те, о которых я мог подумать: -

  1. Отключить кэширование как веб-страниц, так и изображений. Худшее решение.
  2. Отключить кэширование только веб-страниц. Лучшее решение.
  3. Помните, что на стороне сервера image998 был когда-то на image999, и если поступает запрос для /? Image = image999, перенаправьте / перенесите его в /? Image = image998. Лучшее решение, но боль для реализации. РЕДАКТИРОВАТЬ: На самом деле, теперь я понимаю, что это невозможно в моей ситуации sadface

Моя проблема связана не с изображениями, а с видео HTML5. В частности, в Google Chrome я заметил, что видео, похоже, удаляется из кеша довольно часто, хотя я устанавливаю срок годности в кеше. Но я все еще заинтересован в решении общих ресурсов независимо от политики кэширования Chrome.

РЕДАКТИРОВАТЬ: Чтобы подтвердить, я использую "dont revalidate" + "истекает через 1 год" кеширования как на веб-странице, так и на изображении. Таким образом, если агент UA запрашивает веб-страницу (page1) + изображение (image999) один раз, он не попадет на сервер для последующих запросов, и все в порядке. Проблема возникает, когда изображение выпадает из кэша UA, но веб-страница остается. В этой ситуации агент UA не запрашивает сервер для веб-страницы, а запрашивает сервер для изображения (image999). Однако тем временем изображение изменило URL-адреса (image999 -> image998), и сервер вернет 404. В результате UA не будет отображать изображение. Как мне это предотвратить?

1 Ответ

0 голосов
/ 19 декабря 2010

Как уже упоминалось в этом вопросе, я могу подумать об этих решениях, если ограничусь использованием заголовка Expires: -

  1. Отключить кэширование для веб-страниц и изображений.

  2. Включить кэширование только для изображений.Каждый запрос на веб-страницу будет обрабатываться сервером, но запросы на кэшированные изображения не будут попадать на сервер.

  3. Включить кэширование как для веб-страниц, так и для изображений.Для запросов на устаревшие изображения отправьте ответ «301 Moveed Permanently» с указанием местоположения нового изображения и молитесь, чтобы UA его кэшировал.(Мои тесты показывают, что Google Chrome не кэширует 301 запрос или содержимое, на которое он перенаправляется независимо от заголовка Cache)

В связи с моей проблемой я отказался от использования заголовка Expiresи вместо этого я использую ETag для веб-страниц и изображений.Таким образом, мне не нужно обрабатывать запросы на устаревшие изображения.

...