Internet Explorer 9 игнорирует заголовки кеша

Я рву на себе волосы из-за кэширования Internet Explorer 9.

Я установил серию файлов cookie из сценария Perl в зависимости от значения строки запроса. Эти файлы cookie содержат информацию о различных вещах на странице, таких как баннеры и цвета.

Проблема, с которой я сталкиваюсь, заключается в том, что в IE9 он всегда, ВСЕГДА будет использовать кеш вместо использования новых значений. Последовательность событий выглядит так:

  1. Посетите www.example.com/?color=blue
  2. Скрипт Perl устанавливает файлы cookie, я перенаправляюсь обратно на www.example.com
  3. Цвета синие, все как положено.
  4. Посетите www.example.com/?color=red
  5. Куки установлены, перенаправлены, цвета установлены на красный, все нормально
  6. Повторно посетите www.example.com/?color=blue
  7. Perl Script запускается, куки переустанавливаются (я это подтвердил), но! IE9 извлекает все ресурсы из кеша, поэтому при перенаправлении все мои цвета остаются красными.

Таким образом, каждый раз, когда я посещаю новый URL-адрес, ресурсы обновляются, но каждый раз, когда я посещаю ранее посещенный URL-адрес, он извлекает их из кеша.

Следующие метатеги находятся в ‹head› на сайте example.com, что, по моему мнению, предотвратит использование кеша:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
<META HTTP-EQUIV="EXPIRES" CONTENT="0">

Для чего это стоит - я тоже пробовал <META HTTP-EQUIV="EXPIRES" CONTENT="-1">

IE9, похоже, игнорирует ВСЕ эти директивы. Единственный раз, когда я добился успеха в этом браузере, - это использовать инструменты разработчика и убедиться, что для него вручную установлено значение «Всегда обновлять с сервера».

Почему IE игнорирует мои заголовки и как заставить его каждый раз проверять сервер?


person Andy F    schedule 23.11.2011    source источник
comment
вы смотрели http://stackoverflow.com/questions/4360283/http-cache-control? пробовали приват?   -  person Oleg Mikheev    schedule 23.11.2011
comment
ОК, я только что попытался установить для него значение CONTENT=PRIVATE и столкнулся с той же проблемой.   -  person Andy F    schedule 23.11.2011
comment
Попробуйте выполнить вызов API на стороне клиента... в этом случае даже «Всегда обновлять с сервера» не работает. Теперь у меня IE9 почти так же сильно, как я ненавижу IE6   -  person Vroomfundel    schedule 30.11.2011


Ответы (6)


Это не заголовки. Это элементы <meta>, которые являются крайне плохой заменой HTTP-заголовков. Я предлагаю вам прочитать руководство по кэшированию Марка Ноттингема, в нем подробно рассказывается об этом и о том, какие директивы кэширования подходят. использовать.

Кроме того, игнорируйте тех, кто говорит вам установить для кэширования значение private. Это включает кеширование в браузере — там написано "можно кэшировать, если вы не пересылаете его другому клиенту".

person Jim    schedule 14.12.2011

Попробуйте отправить следующее как заголовки HTTP (не теги meta):

Cache-Control: private, must-revalidate, max-age=0
Expires: Thu, 01 Jan 1970 00:00:00
person johnstok    schedule 14.12.2011

Я не знаю, будет ли это кому-нибудь полезно, но у меня была похожая проблема на моем веб-сайте фильмов (crosstastemovies.com). Всякий раз, когда я нажимал кнопку «получить больше фильмов» (которая извлекает новую случайную партию фильмов для оценки), IE9 возвращал ту же самую страницу и игнорировал ответ сервера...: P

Мне пришлось вызывать случайную переменную, чтобы IE9 не делал этого. Поэтому вместо вызова «index.php?location=rate_movies» я изменил его на «index.php?location=rate_movies&rand=RANDOMSTRING».

Уже все хорошо.

Ваше здоровье

person Pedro Araujo Jorge    schedule 06.03.2013

Просто упомяну, что у меня была проблема, очень похожая на эту. Но я попробовал IE9 на другом компьютере, и проблем не было. Затем переход в «Свойства обозревателя» -> «Основные» -> «Удалить» и удаление всего восстановило правильное поведение. Удаление кеша оказалось недостаточным.

person peter2108    schedule 27.08.2012


Джонсток прав. Ввод этого кода позволит обновлять контент с сервера, а не просто обновлять страницу.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8; Cache-Control: no-cache" />

поместите эту строку кода в свой раздел, если вам нужно, чтобы она была в вашем asp-коде, и она должна работать.

person Anthony    schedule 23.01.2013
comment
‹мета http-equiv=Content-Type content=text/html; кодировка=utf-8; Кэш-Контроль: без кеша /› - person Anthony; 23.01.2013