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:
|
Настройка
Элемент <clientCache>
<staticContent>
элемента включен в установку iis 7 и более поздних версий по умолчанию.
Инструкции
Настройка даты окончания срока действия кэша для веб-сайта или приложения
Откройте диспетчер служб 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.
В области Подключения перейдите к сайту, приложению или каталогу, для которых требуется отключить кэширование.
В области Заголовки HTTP-ответа щелкните Задать общие заголовки... в области Действия .
В диалоговом окне Настройка общих заголовков http-ответов проверка поле для истечения срока действия веб-содержимого, выберите параметр, срок действия которого истекает через определенный интервал или в определенное время, а затем нажмите кнопку ОК.
Отключение кэширования для веб-сайта или приложения
Откройте диспетчер служб 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.
В области Подключения перейдите к сайту, приложению или каталогу, для которых требуется отключить кэширование.
В области Заголовки HTTP-ответа щелкните Задать общие заголовки... в области Действия .
В диалоговом окне Настройка общих заголовков http-ответов проверка поле для истечения срока действия веб-содержимого, выберите Немедленно, а затем нажмите кнопку ОК.
Конфигурация
Атрибуты
Атрибут | Описание | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
cacheControlCustom |
Необязательный строковый атрибут. Задает настраиваемые директивы управления кэшем HTTP 1.1. |
||||||||||
cacheControlMaxAge |
Необязательный атрибут timeSpan. Указывает максимальный возраст (в секундах) значения элемента управления кэшем. Значение по умолчанию — 1.00:00:00 (1 день). |
||||||||||
cacheControlMode |
Необязательный атрибут перечисления. Указывает режим, используемый для кэширования клиента. Атрибут cacheControlMode может быть одним из следующих возможных значений. Значение по умолчанию — NoControl .
|
||||||||||
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()