Предотвращение кэширования в Интернет-Обозреватель

Предупреждение

Устаревшее и не поддерживаемое классическое приложение Internet Explorer 11 было окончательно отключено путем обновления Microsoft Edge в некоторых версиях Windows 10. Дополнительные сведения см. в разделе Часто задаваемые вопросы о прекращении поддержки программы для настольных компьютеров Internet Explorer 11.

В этой статье описывается использование заголовков HTTP для управления кэшированием веб-страниц в Интернете Обозреватель.

Исходная версия продукта: Интернет-Обозреватель
Исходный номер базы знаний: 234067

Сводка

Вы можете использовать Microsoft Internet Information Server (IIS), чтобы легко помечать страницы с высокой степенью активности или конфиденциальности с помощью следующего скрипта в крайнем начале определенных страниц Active Server (ASP):

<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>

Срок действия и заголовок Expires

Настоятельно рекомендуется, чтобы все веб-серверы использовали схему для истечения срока действия всех веб-страниц. Для веб-сервера не рекомендуется предоставлять сведения об истечении срока действия через заголовок ответа HTTP Expires для каждого ресурса, возвращаемого запрашивающим клиентам. Большинство браузеров и промежуточных прокси-серверов сегодня уважают эту информацию об истечении срока действия и используют ее для повышения эффективности связи по сети.

Всегда используйте заголовок Expires, чтобы указать наиболее разумное время, когда конкретный файл на сервере должен быть обновлен клиентом. При регулярном обновлении страниц наиболее эффективным ответом будет следующий период обновления. Возьмем, например, ежедневную новостную страницу в Интернете, которая обновляется каждый день в 5 утра. Веб-сервер для этой страницы новостей должен вернуть заголовок Expires со значением 5 утра на следующий день. После этого браузеру не нужно снова обращаться к веб-серверу, пока страница не изменится.

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

Во многих случаях веб-серверы имеют одну или несколько изменяющихся страниц на сервере, которые содержат сведения, которые могут быть немедленно изменены. Эти страницы должны быть помечены сервером значением "-1" для заголовка Expires. При последующих запросах пользователя Интернет Обозреватель обычно связывается с веб-сервером для обновления этой страницы с помощью условного запроса If-Modified-Since. Однако страница остается в кэше диска (временные файлы Интернета). Страница используется в соответствующих ситуациях без обращения к удаленному веб-серверу, например:

  • когда для доступа к журналу навигации используются кнопки НАЗАД и ВПЕРЕД.
  • если браузер находится в автономном режиме.

Заголовок Cache-Control

Однако некоторые страницы настолько изменчивы или конфиденциальны, что не требуют кэширования диска. С этой целью internet Обозреватель поддерживает заголовок Cache-Control HTTP 1.1. Этот заголовок предотвращает кэширование определенного веб-ресурса, если значение без кэша указано сервером HTTP 1.1.

Страницы, которые хранятся вне кэша, недоступны до тех пор, пока браузер не сможет повторно использовать веб-сервер. Таким образом, серверы должны использовать заголовок Cache-Control экономно. В большинстве случаев рекомендуется использовать значение Expires: -1.

Заголовок Pragma: No-Cache

К сожалению, устаревшие серверы HTTP 1.0 не могут использовать заголовок Cache-Control. В целях обратной совместимости с серверами HTTP 1.0 Интернет Обозреватель поддерживает специальное использование заголовка HTTP Pragma: no-cache. Если клиент взаимодействует с сервером по безопасному соединению (https://), а сервер возвращает заголовок Pragma: no-cache с ответом, интернет-Обозреватель не кэширует ответ.

Однако заголовок Pragma: no-cache не предназначен для этой цели. В соответствии со спецификациями HTTP 1.0 и 1.1 этот заголовок определяется только в контексте запроса, а не ответа. Он предназначен для прокси-серверов, которые могут препятствовать получению определенных важных запросов к целевому веб-серверу. Для будущих приложений заголовок Cache-Control является правильным средством управления кэшированием.

Метатеги 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: без кэша запрещает кэширование только при использовании через безопасное подключение. Тег META Pragma: no-cache обрабатывается так же, как и Expires: -1, если используется на небезопасной странице. Страница будет кэширована, но помечена как немедленно истекла.

теги HTTP-EQUIV Cache-Control META игнорируются и не действуют в Internet Обозреватель версии 4 или 5. Чтобы использовать Cache-Control, этот заголовок должен быть указан с помощью заголовков HTTP, как описано в разделе Cache-Control выше.

Примечание.

Использование стандартных заголовков HTTP гораздо предпочтительнее, чем теги META. Теги META обычно должны отображаться в верхней части раздела HTML-HEAD. Кроме того, существует по крайней мере одна известная проблема с тегом PRAgma HTTP-EQUIV META.

Параметры сервера для кэширования

Если заголовок Cache-Control необходимо использовать на страницах, отличных от ASP, для автоматического добавления этого заголовка может потребоваться использовать параметры в конфигурации сервера. Процесс добавления заголовков HTTP в ответы сервера для определенного каталога см. в документе сервера. Например, в IIS 4 выполните следующие действия.

  1. Запустите диспетчер IIS.
  2. В дереве компьютеров и служб откройте веб-сервер по умолчанию или соответствующий веб-сервер. Найдите каталог, содержащий содержимое, которому требуется заголовок Cache-Control.
  3. Откройте диалоговое окно Свойства для этого каталога.
  4. Перейдите на вкладку Заголовки HTTP .
  5. Нажмите кнопку Добавить в группе Настраиваемые заголовки HTTP и добавьте Cache-Control для имени заголовка и no-cache для значения заголовка.

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

Контрольный список проблем

Если вы применили методы, описанные в этой статье, и у вас по-прежнему возникают проблемы с кэшированием и интернет-Обозреватель, просмотрите этот удобный контрольный список, прежде чем обращаться за технической поддержкой в Майкрософт:

  • Используется ли заголовок Cache-Control со свойством ASP Response.CacheControl или через возвращенный заголовок HTTP? Это единственный способ действительно предотвратить кэширование в Обозреватель Интернета.
  • Вы используете Internet Обозреватель 4.01 с пакетом обновления 2 (SP2) или более поздней версии? Полностью предотвратить кэширование в более ранних версиях браузера невозможно.
  • Вы перепроверили, что на веб-сервере включен протокол HTTP 1.1 и что он возвращает ответы HTTP 1.1 в интернет-Обозреватель? Cache-Control заголовки недопустимы в ответах HTTP 1.0.
  • Если вы используете CGI/ISAPI/Servlets на стороне сервера, точно ли вы следуете спецификации HTTP 1.1, особенно о завершении CRLF заголовков HTTP? В интересах производительности Интернет-Обозреватель обычно неумолимые ответы, которые нарушают спецификацию HTTP 1.1. Обычно это приводит к игнорированию заголовков или отчетов о непредвиденных ошибках сервера.
  • Правильно ли написаны заголовки HTTP?

См. также