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, и он должен работать.