Internet Explorer 9 игнорирует отсутствие заголовков кэша - PullRequest
11 голосов
/ 23 ноября 2011

Я теряю голову над кэшированием в Internet Explorer 9.

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

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

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

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

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

Ответы [ 6 ]

7 голосов
/ 14 декабря 2011

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

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

3 голосов
/ 14 декабря 2011

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

Cache-Control: private, must-revalidate, max-age=0
Expires: Thu, 01 Jan 1970 00:00:00
2 голосов
/ 06 марта 2013

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

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

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

Cheers

0 голосов
/ 23 января 2013

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

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

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

0 голосов
/ 09 октября 2012

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

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

0 голосов
/ 27 августа 2012

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

...