Client Cache ClientCache <>

Общие сведения

Элемент <clientCache><staticContent> элемента указывает http-заголовки, связанные с кэшем, которые IIS 7 и более поздних версий отправляют веб-клиентам, которые управляют тем, как веб-клиенты и прокси-серверы кэшируют содержимое, возвращаемого IIS 7 и более поздних версий.

Например, атрибут httpExpires указывает дату и время истечения срока действия содержимого, а СЛУЖБЫ IIS 7 и более поздних версий добавят в ответ заголовок HTTP "Expires". Значением атрибута httpExpires должно быть полностью отформатированные дата и время, которые соответствуют спецификации в RFC 1123. Например:

Пт, 01 Января 2010 12:00:00 GMT

Примечание

Чтобы использовать атрибут httpExpires , необходимо задать для атрибута cacheControlMode значение UseExpires.

Спецификация HTTP 1.1 в запросе комментариев (RFC) 2616 указывает несколько возможных значений для заголовка HTTP Cache-Control, например no-cache, private, public и т. д. Каждое из этих значений заголовка позволяет веб-клиентам и прокси-серверам определить, следует ли кэшировать содержимое:

  • Содержимое, содержащее заголовок "без кэша", не должно кэшироваться какой-либо сущностью. — Содержимое, содержащее "закрытый" заголовок, не должно кэшироваться прокси-сервером, но может кэшироваться веб-клиентом. — Содержимое, содержащее заголовок public, может кэшироваться любой сущностью.

    Примечание

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

В заголовок HTTP Cache-Control можно добавить дополнительные директивы, например max-age, который указывает явное время истечения срока действия содержимого. В IIS 7 директива max-age настраивается с помощью атрибута cacheControlMaxAge . Хотя параметры "Истекает" и "максимальный возраст" несколько аналогичны, директива max-age имеет приоритет над "Истекает".

Примечание

Чтобы использовать атрибут cacheControlMaxAge , необходимо задать для атрибута cacheControlMode значение UseMaxAge.

Дополнительные сведения о заголовках HTTP-кэширования и форматах даты и времени см. в следующих статьях о запросе комментариев (RFC):

  • RFC 1123 — "Требования к узлам Интернета - приложения и поддержка"
  • RFC 2616 — "Протокол передачи гипертекста - HTTP/1.1"

Совместимость

Версия Примечания
IIS 10.0 Элемент <clientCache> не был изменен в IIS 10.0.
IIS 8,5 Элемент <clientCache> не был изменен в IIS 8.5.
IIS 8,0 Добавлен setEtag атрибут , чтобы указать, вычисляется ли и задается ли заголовок HTTP ETag.
IIS 7,5 Элемент <clientCache> не был изменен в IIS 7.5.
IIS 7.0 Элемент <clientCache> элемента появился <staticContent> в IIS 7.0.
IIS 6,0 Элемент <clientCache> заменяет следующие свойства метабазы IIS 6.0:
  • CacheControlCustom
  • CacheControlMaxAge
  • CacheControlNoCache
  • HttpExpires

Настройка

Элемент <clientCache><staticContent> элемента включен в установку iis 7 и более поздних версий по умолчанию.

Инструкции

Настройка даты окончания срока действия кэша для веб-сайта или приложения

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку Пуск, наведите указатель на пункт Администрирование, а затем выберите Пункт Диспетчер служб IIS.
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку Пуск, а затем панель управления.
      • Дважды щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения перейдите к сайту, приложению или каталогу, для которых требуется отключить кэширование.

  3. На домашней панели дважды щелкните заголовки HTTP-ответов.
    Снимок экрана: панель

  4. В области Заголовки HTTP-ответа щелкните Задать общие заголовки... в области Действия .
    Снимок экрана: панель заголовков ответов H TP в диспетчере IS.

  5. В диалоговом окне Настройка общих заголовков http-ответов проверка поле для истечения срока действия веб-содержимого, выберите параметр, срок действия которого истекает через определенный интервал или в определенное время, а затем нажмите кнопку ОК.
    Снимок экрана: диалоговое окно
    Снимок экрана: диалоговое окно

Отключение кэширования для веб-сайта или приложения

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку Пуск, наведите указатель на пункт Администрирование, а затем выберите Пункт Диспетчер служб IIS.
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку Пуск, а затем панель управления.
      • Дважды щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения перейдите к сайту, приложению или каталогу, для которых требуется отключить кэширование.

  3. На домашней панели дважды щелкните заголовки HTTP-ответов.
    Снимок экрана: панель

  4. В области Заголовки HTTP-ответа щелкните Задать общие заголовки... в области Действия .
    Снимок экрана: панель заголовков ответа H TP.

  5. В диалоговом окне Настройка общих заголовков http-ответов проверка поле для истечения срока действия веб-содержимого, выберите Немедленно, а затем нажмите кнопку ОК.
    Снимок экрана: диалоговое окно

Конфигурация

Атрибуты

Атрибут Описание
cacheControlCustom Необязательный строковый атрибут.

Задает настраиваемые директивы управления кэшем HTTP 1.1.
cacheControlMaxAge Необязательный атрибут timeSpan.

Указывает максимальный возраст (в секундах) значения элемента управления кэшем.

Значение по умолчанию — 1.00:00:00 (1 день).
cacheControlMode Необязательный атрибут перечисления.

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

Атрибут cacheControlMode может быть одним из следующих возможных значений.

Значение по умолчанию — NoControl.
Значение Описание
NoControl Не добавляет к ответу заголовок Cache-Control или Expires.

Числовое значение равно 0.
DisableCache Добавляет в ответ заголовок Cache-Control: no-cache.

Числовое значение равно 1.
UseMaxAge Добавляет заголовок Cache-Control: max-age=<nnn> в ответ на основе значения, указанного в атрибуте CacheControlMaxAge .

Числовое значение равно 2.
UseExpires Добавляет заголовок Expires: <date> в ответ на основе даты, указанной в атрибуте httpExpires .

Числовое значение равно 3.
httpExpires Необязательный строковый атрибут.

Указывает дату и время, после которого страница, кэшированная на клиенте, считается устаревшей. (Дата и время форматируются в соответствии со спецификацией в разделе Запрос комментариев 1123.) Значение возвращается в браузер в заголовке HTML-файла. Агент пользователя сравнивает заданное значение с текущей датой, чтобы определить, следует ли отображать кэшированную страницу или запрашивать обновленную страницу с сервера.
setEtag Дополнительный логический атрибут.

Указывает, вычисляется ли и задан заголовок HTTP ETag. Заголовок ETag используется для проверки веб-кэша и позволяет веб-серверу не отправлять полный ответ, если в содержимое не было внесено никаких изменений. setEtag можно задать в редакторе конфигураций в пути system.webServer/staticContent.

Значение по умолчанию — true.

Дочерние элементы

Отсутствует.

Образец конфигурации

В следующем примере конфигурации к ответу добавляется заголовок HTTP "Cache-Control: no-cache", тем самым отключая кэширование запросов.

<configuration>
   <system.webServer>
      <staticContent>
         <clientCache cacheControlMode="DisableCache" />
      </staticContent>
   </system.webServer>
</configuration>

В следующем примере конфигурации к ответу добавляется заголовок HTTP "Срок действия: вт, 19 января 2038 г. 03:14:07 GMT", который настраивает срок действия запросов на несколько лет.

<configuration>
   <system.webServer>
      <staticContent>
         <clientCache cacheControlMode="UseExpires"
            httpExpires="Tue, 19 Jan 2038 03:14:07 GMT" />
      </staticContent>
   </system.webServer>
</configuration>

Пример кода

В следующих примерах кода к ответу добавляется заголовок HTTP "Cache-Control: no-cache", тем самым отключая кэширование запросов.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/staticContent /clientCache.cacheControlMode:"DisableCache"

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using(ServerManager serverManager = new ServerManager())
      { 
         Configuration config = serverManager.GetWebConfiguration("Default Web Site");
         ConfigurationSection staticContentSection = config.GetSection("system.webServer/staticContent");

         ConfigurationElement clientCacheElement = staticContentSection.GetChildElement("clientCache");
         clientCacheElement["cacheControlMode"] = @"DisableCache";

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetWebConfiguration("Default Web Site")
      Dim staticContentSection As ConfigurationSection = config.GetSection("system.webServer/staticContent")

      Dim clientCacheElement As ConfigurationElement = staticContentSection.GetChildElement("clientCache")
      clientCacheElement("cacheControlMode") = "DisableCache"

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site";

var staticContentSection = adminManager.GetAdminSection("system.webServer/staticContent", "MACHINE/WEBROOT/APPHOST/Default Web Site");
var clientCacheElement = staticContentSection.ChildElements.Item("clientCache");
clientCacheElement.Properties.Item("cacheControlMode").Value = "DisableCache";

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site"

Set staticContentSection = adminManager.GetAdminSection("system.webServer/staticContent", "MACHINE/WEBROOT/APPHOST/Default Web Site")
Set clientCacheElement = staticContentSection.ChildElements.Item("clientCache")
clientCacheElement.Properties.Item("cacheControlMode").Value = "DisableCache"

adminManager.CommitChanges()

В следующих примерах кода к ответу добавляется заголовок HTTP "Срок действия: вт, 19 января 2038 г. 03:14:07 GMT", который настраивает срок действия запросов на несколько лет.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/staticContent /clientCache.cacheControlMode:"UseExpires"

appcmd.exe set config "Default Web Site" -section:system.webServer/staticContent /clientCache.httpExpires:"Tue, 19 Jan 2038 03:14:07 GMT"

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using(ServerManager serverManager = new ServerManager())
      { 
         Configuration config = serverManager.GetWebConfiguration("Default Web Site");
         ConfigurationSection staticContentSection = config.GetSection("system.webServer/staticContent");

         ConfigurationElement clientCacheElement = staticContentSection.GetChildElement("clientCache");
         clientCacheElement["cacheControlMode"] = @"UseExpires";
         clientCacheElement["httpExpires"] = @"Tue, 19 Jan 2038 03:14:07 GMT";

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetWebConfiguration("Default Web Site")
      Dim staticContentSection As ConfigurationSection = config.GetSection("system.webServer/staticContent")

      Dim clientCacheElement As ConfigurationElement = staticContentSection.GetChildElement("clientCache")
      clientCacheElement("cacheControlMode") = "UseExpires"
      clientCacheElement("httpExpires") = "Tue, 19 Jan 2038 03:14:07 GMT"

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site";

var staticContentSection = adminManager.GetAdminSection("system.webServer/staticContent", "MACHINE/WEBROOT/APPHOST/Default Web Site");
var clientCacheElement = staticContentSection.ChildElements.Item("clientCache");
clientCacheElement.Properties.Item("cacheControlMode").Value = "UseExpires";
clientCacheElement.Properties.Item("httpExpires").Value = "Tue, 19 Jan 2038 03:14:07 GMT";

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Default Web Site"

Set staticContentSection = adminManager.GetAdminSection("system.webServer/staticContent", "MACHINE/WEBROOT/APPHOST/Default Web Site")
Set clientCacheElement = staticContentSection.ChildElements.Item("clientCache")
clientCacheElement.Properties.Item("cacheControlMode").Value = "UseExpires"
clientCacheElement.Properties.Item("httpExpires").Value = "Tue, 19 Jan 2038 03:14:07 GMT"

adminManager.CommitChanges()