Как предотвратить кэширование в Internet Explorer
Предупреждение
Устаревшее и не поддерживаемое классическое приложение Internet Explorer 11 было окончательно отключено путем обновления Microsoft Edge в некоторых версиях Windows 10. Дополнительные сведения см. в разделе Часто задаваемые вопросы о прекращении поддержки программы для настольных компьютеров Internet Explorer 11.
В этой статье описывается использование заголовков HTTP для управления кэшированием веб-страниц в Internet Explorer.
Исходная версия продукта: Internet Explorer
Исходный номер базы знаний: 234067
Итоги
С помощью Microsoft Internet Information Server (IIS) можно легко пометить страницы с высокой степенью волатильности или конфиденциальности с помощью следующего сценария в начале определенных страниц Active Server Pages (ASP):
<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>
Срок действия и заголовок "Истекает срок действия"
Настоятельно рекомендуется использовать схему для истечения срока действия всех веб-страниц. Это плохая практика для веб-сервера не предоставлять сведения об истечении срока действия с помощью заголовка ответа "Срок действия HTTP" для каждого ресурса, возвращаемого для запрашивающих клиентов. Большинство браузеров и промежуточных прокси-серверов сегодня уважают эту информацию об истечении срока действия и используют ее для повышения эффективности обмена данными по сети.
Всегда используйте заголовок "Срок действия", чтобы указать наиболее разумное время, когда определенный файл на сервере должен обновляться клиентом. Когда страницы регулярно обновляются, следующий период обновления является наиболее эффективным ответом. Например, ежедневная страница новостей в Интернете, которая обновляется каждый день в 5 утра. Веб-сервер для этой страницы новостей должен возвращать заголовок "Срок действия" со значением 5 утра на следующий день. По завершении браузер не должен снова связаться с веб-сервером, пока страница не изменится.
Страницы, которые не должны изменяться, должны быть помечены датой окончания срока действия примерно один год.
Во многих случаях веб-серверы имеют одну или несколько изменяющихся страниц на сервере с информацией, которая подлежит немедленному изменению. Эти страницы должны быть помечены сервером со значением "-1" для заголовка "Срок действия". В будущих запросах пользователя Internet Explorer обычно обращается к веб-серверу для обновления этой страницы с помощью условного запроса If-Modified-Since. Однако страница остается в кэше дисков (временные файлы Интернета). Страница используется в соответствующих ситуациях, не связываясь с удаленным веб-сервером, например:
- Когда кнопки BACK и FORWARD используются для доступа к журналу навигации.
- если браузер находится в автономном режиме.
Заголовок cache-Control
Однако некоторые страницы являются настолько неустойчивыми или конфиденциальными, что они не требуют кэширования дисков. Для этого Internet Explorer поддерживает заголовок кэша HTTP 1.1 Cache-Control. Этот заголовок предотвращает кэширование определенного веб-ресурса, если значение без кэша указано сервером HTTP 1.1.
Страницы, которые хранятся вне кэша, недоступны, пока браузер не сможет восстановить веб-сервер. Таким образом, серверы должны использовать заголовок Cache-Control с разреженным образом. В большинстве случаев используется срок действия: -1 предпочтителен.
Заголовок Pragma: No-Cache
К сожалению, устаревшие серверы HTTP 1.0 не могут использовать заголовок Cache-Control. Для обеспечения обратной совместимости с серверами HTTP 1.0 Internet Explorer поддерживает специальное использование заголовка HTTP Pragma: no-cache. Если клиент взаимодействует с сервером через безопасное подключение (https://
) и сервер возвращает pragma: заголовок no-cache с ответом, Internet Explorer не кэширует ответ.
Тем не менее, Pragma: заголовок no-cache не был для этой цели. Согласно спецификациям HTTP 1.0 и 1.1, этот заголовок определяется только в контексте запроса, а не ответа. Он предназначен для прокси-серверов, которые могут препятствовать определенным важным запросам достичь целевого веб-сервера. Для будущих приложений заголовок Cache-Control является правильным средством для управления кэшированием.
ТЕГИ META HTTP-EQUIV
HTML-страницы позволяют использовать специальную форму HTTP-EQUIV тега META, указывающего определенные заголовки HTTP из HTML-документа. Ниже приведен краткий пример HTML-страницы, использующая как Pragma: no-cache и Expires: -1:
<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</HEAD>
<BODY>
</BODY>
</HTML>
Pragma: без кэша запрещает кэширование только при использовании безопасного подключения. Pragma: тег META без кэша обрабатывается одинаково с сроком действия: -1, если используется на небезопасной странице. Страница будет кэширована, но помечена как немедленно истека.
Теги META HTTP-EQUIV кэша управления кэшем игнорируются и не влияют на internet Explorer версии 4 или 5. Чтобы использовать элемент управления кэшем, этот заголовок необходимо указать с помощью заголовков HTTP, как описано в разделе "Управление кэшем" выше.
Примечание.
Использование стандартных заголовков HTTP гораздо предпочтительнее для тегов META. Теги META обычно должны отображаться в верхней части раздела HTML HEAD. И есть по крайней мере одна известная проблема с тегом PRAgma HTTP-EQUIV META.
Параметры сервера для кэширования
Если необходимо использовать заголовок cache-Control на страницах, отличных от ASP, может потребоваться использовать параметры в конфигурации сервера для автоматического добавления этого заголовка. Сведения о добавлении заголовков HTTP в ответы сервера для определенного каталога см. в документе сервера. Например, в IIS 4 выполните следующие действия.
- Запустите диспетчер IIS.
- В дереве компьютеров и служб откройте веб-сервер по умолчанию или веб-сервер. Найдите каталог, содержащий содержимое, которое требует заголовка Cache-Control.
- Откройте диалоговое окно "Свойства " для этого каталога.
- Перейдите на вкладку заголовков HTTP.
- Нажмите кнопку "Добавить" в группе настраиваемых заголовков HTTP и добавьте элемент управления кэшем для имени заголовка и значения заголовка без кэша.
Это не рекомендуется использовать этот заголовок глобально на всем веб-сервере. Ограничить его использование исключительно контентом, который абсолютно не должен кэшироваться на клиенте.
Контрольный список проблем
Если вы применили методы в этой статье, и у вас по-прежнему возникают проблемы с кэшированием и Internet Explorer, просмотрите этот удобный контрольный список пошаговые инструкции перед обращением в Корпорацию Майкрософт за технической поддержкой:
- Используется ли заголовок Cache-Control со свойством ASP
Response.CacheControl
или возвращаемым заголовком HTTP? Это единственный способ предотвратить кэширование в Internet Explorer. - Вы используете Internet Explorer 4.01 с пакетом обновления 2 или более поздней версии? Невозможно полностью предотвратить кэширование в более ранних версиях браузера.
- Вы дважды проверили, включен ли веб-сервер HTTP 1.1 и возвращает ответы HTTP 1.1 в Internet Explorer? Заголовки cache-Control недопустимы в ответах HTTP 1.0.
- Если вы используете CGI/ISAPI/Servlets на стороне сервера, вы следуете точной спецификации HTTP 1.1, особенно о завершении CRLF заголовков HTTP? В интересах производительности Internet Explorer, как правило, неупрощает ответы, которые нарушают спецификацию HTTP 1.1. Обычно это приводит к пропущенным заголовкам или отчетам о непредвиденных ошибках сервера.
- Правильно ли написаны заголовки HTTP?
См. также
- Дополнительные сведения о протоколе HTTP 1.1 см. по этой внешней ссылке: RFC 2616.
- Кэш клиента в IIS