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

Я отрываю свои волосы от кеширования через Internet Explorer 9.

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

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

  • Посетите сайт www.example.com/?color=blue
  • Perl script устанавливает файлы cookie, я перенаправлен на www.example.com
  • Цвета синие, все как ожидается.
  • Посетите сайт www.example.com/?color=red
  • Печенье установлено, перенаправлено, цвета установлены на красный, все нормально
  • Перейдите на сайт www.example.com/?color=blue
  • Perl script работает, файлы cookie переустанавливаются (я это подтвердил), но! IE9 возвращает все ресурсы из кеша, поэтому перенаправление всех моих цветов остается красным.

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

Следующие метатеги находятся в <head> of 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 игнорирует мои заголовки и как я могу заставить его проверять сервер каждый раз?

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Теперь все в порядке.

Приветствия

Ответ 4

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

Ответ 5

Единственные элементы, которые определяет HTML5, - это тип содержимого, стиль по умолчанию и обновление. См. спецификацию

Что-нибудь еще, что работает, только по благодати браузера, и вы не можете зависеть от него.

Ответ 6

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

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

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