Clientcache <clientCache>
Übersicht
Das <clientCache>
-Element des <staticContent>
-Elements gibt cachebezogene HTTP-Header an, die IIS 7 und höher an Webclients sendet, wodurch gesteuert wird, wie Webclients und Proxyserver die Inhalte zwischenspeichern, die IIS 7 und höher zurückgeben.
Beispielsweise gibt das httpExpires-Datum ein Datum und eine Uhrzeit an, zu der der Inhalt ablaufen soll, und IIS 7 und höher fügt der Antwort einen „Expires“-HTTP-Header hinzu. Der Wert für das httpExpires-Attribut muss ein vollständig formatiertes Datum und eine Uhrzeit sein, die der Spezifikation in RFC 1123 folgt. Zum Beispiel:
Fr, 01 Jan. 2010 12:00:00 GMT
Hinweis
Um das httpExpires-Attribut zu verwenden, müssen Sie den Wert des cacheControlMode-Attributs auf UseExpires festlegen.
Die HTTP 1.1-Spezifikation in Request for Comments (RFC) 2616 gibt mehrere mögliche Werte für den HTTP-Header „Cache-Control“ an, z. B. „no-cache“, „private“, „public“, usw. Jeder dieser Headerwerte informiert Webclients und Proxyserver darüber, ob sie den Inhalt zwischenspeichern sollten:
Inhalte, die einen „no-cache“-Header enthalten, sollten nicht von einer Entität zwischengespeichert werden. – Inhalte, die einen „Private“ Header enthalten, sollten nicht von einem Proxyserver zwischengespeichert werden, können aber von einem Webclient zwischengespeichert werden. – Inhalte, die einen „öffentlichen“ Header enthalten, können von jeder Entität zwischengespeichert werden.
Hinweis
Die obige Liste ist nicht vollständig – es gibt viele zusätzliche Werte, die durch den Header „Cache-Control“ angegeben werden können.
Zusätzliche Direktiven können dem HTTP-Header „Cache-Control“ hinzugefügt werden, z. B. „max-age“, der die explizite Ablaufzeit für Inhalte angibt. In IIS 7 wird die „max-age“-Direktive über das cacheControlMaxAge-Attribut konfiguriert. Während die Einstellungen „Ablauf“ und „Max-Alter“ etwas analog sind, hat die Richtlinie „max-age“ Vorrang vor „Expires“.
Hinweis
Um das cacheControlMaxAge-Attribut zu verwenden, müssen Sie den Wert des cacheControlMode-Attributs auf UseMaxAge festlegen.
Weitere Informationen zu HTTP-Caching-Headern und Datums-/Uhrzeitformaten finden Sie in den folgenden Request For Comments (RFC):
- RFC 1123 – „Anforderungen für Internethosts – Anwendung und Support“
- RFC 2616 – „Hypertext Transfer Protocol -- HTTP/1.1“
Kompatibilität
Version | Hinweise |
---|---|
IIS 10.0 | Das <clientCache> -Element wurde in IIS 10.0 nicht geändert. |
IIS 8.5 | Das <clientCache> -Element wurde in IIS 8.5 nicht geändert. |
IIS 8.0 | Das setEtag -Attribut wurde hinzugefügt, um anzugeben, ob der HTTP-ETag-Header berechnet und festgelegt wird. |
IIS 7.5 | Das <clientCache> -Element wurde in IIS 7.5 nicht geändert. |
IIS 7.0 | Das <clientCache> -Element des <staticContent> -Elements wurde in IIS 7.0 eingeführt. |
IIS 6.0 | Das <clientCache> -Element ersetzt die folgenden Metabasiseigenschaften von IIS 6.0:
|
Setup
Das <clientCache>
-Element des <staticContent>
-Elements ist in der Standardinstallation von IIS 7 und höher enthalten.
Gewusst wie
Konfigurieren eines Cacheablaufdatums für eine Website oder Anwendung
Öffnen Sie den Internet Information Services (IIS) Manager:
Wenn Sie Windows Server 2012 oder Windows Server 2012 R2 verwenden:
- Klicken Sie in der Taskleiste auf Server-Manager, dann auf Tools und dann auf den Internet Information Services (IIS) Manager.
Wenn Sie Windows 8 oder Windows 8.1 verwenden:
- Halten Sie die Windows-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf "Systemsteuerung".
- Klicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
Wenn Sie Windows Server 2008 oder Windows Server 2008 R2 verwenden:
- Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltung und dann auf den Internet Information Services (IIS) Manager.
Wenn Sie Windows Vista oder Windows 7 verwenden:
- Klicken Sie auf der Taskleiste auf Start und dann auf Systemsteuerung.
- Doppelklicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
Navigieren Sie im Bereich Verbindungen zu der Site, Anwendung oder dem Verzeichnis, für das Sie Zwischenspeicherung deaktivieren möchten.
Klicken Sie im Bereich HTTP-Antwortheader im Bereich Aktionen auf Allgemeine Header festlegen....
Aktivieren Sie im Dialogfeld Allgemeine HTTP-Antwortheader festlegen das Kontrollkästchen zum Ablaufen von Webinhalten, aktivieren Sie die Option zum Ablaufen nach einem bestimmten Intervall oder zu einem bestimmten Zeitpunkt und klicken Sie dann auf OK.
So deaktivieren Sie die Zwischenspeicherung für eine Website oder Anwendung
Öffnen Sie den Internet Information Services (IIS) Manager:
Wenn Sie Windows Server 2012 oder Windows Server 2012 R2 verwenden:
- Klicken Sie in der Taskleiste auf Server-Manager, dann auf Tools und dann auf den Internet Information Services (IIS) Manager.
Wenn Sie Windows 8 oder Windows 8.1 verwenden:
- Halten Sie die Windows-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf "Systemsteuerung".
- Klicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
Wenn Sie Windows Server 2008 oder Windows Server 2008 R2 verwenden:
- Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltung und dann auf den Internet Information Services (IIS) Manager.
Wenn Sie Windows Vista oder Windows 7 verwenden:
- Klicken Sie auf der Taskleiste auf Start und dann auf Systemsteuerung.
- Doppelklicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
Navigieren Sie im Bereich Verbindungen zu der Site, Anwendung oder dem Verzeichnis, für das Sie Zwischenspeicherung deaktivieren möchten.
Klicken Sie im Bereich HTTP-Antwortheader im Bereich Aktionen auf Allgemeine Header festlegen....
Markieren Sie im Dialogfeld Allgemeine HTTP-Antwortheader festlegen das Kontrollkästchen zum Ablaufen von Webinhalten, wählen Sie Sofort und klicken Sie dann auf OK.
Konfiguration
Attribute
Attribut | Beschreibung | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
cacheControlCustom |
Optionales Zeichenfolgeattribut. Gibt benutzerdefinierte HTTP 1.1-Cachesteuerelementdirektiven an. |
||||||||||
cacheControlMaxAge |
Optionales timeSpan-Attribut. Gibt das maximale Alter (in Sekunden) des Cachesteuerelementwerts an. Der Standardwert ist 1.00:00:00 (1 Tag). |
||||||||||
cacheControlMode |
Optionales Enumerationsattribut. Gibt den Modus an, der für die Clientzwischenspeicherung verwendet werden soll. Das cacheControlMode-Attribut kann einer der folgenden möglichen Werte sein. Der Standardwert ist NoControl .
|
||||||||||
httpExpires |
Optionales Zeichenfolgeattribut. Gibt das Datum und die Uhrzeit an, nach der eine Seite, die beim Client zwischengespeichert wird, als veraltet betrachtet wird. (Das Datum und die Uhrzeit werden gemäß der Spezifikation in Request for Comments 1123 formatiert.) Der Wert wird im HTML-Dateiheader an den Browser zurückgegeben. Der Benutzer-Agent vergleicht den angegebenen Wert mit dem aktuellen Datum, um zu bestimmen, ob eine zwischengespeicherte Seite angezeigt oder eine aktualisierte Seite vom Server angefordert werden soll. |
||||||||||
setEtag |
Optionales boolesches Attribut. Gibt an, ob der HTTP-ETag-Header berechnet und eingestellt ist. Der ETag-Header wird für die Webcacheüberprüfung verwendet und ermöglicht es einem Webserver, keine vollständige Antwort zu senden, wenn keine Änderungen an dem Inhalt vorgenommen wurden. setEtag kann im Konfigurations-Editor im Pfad system.webServer/staticContent festgelegt werden.Der Standardwert ist true . |
Untergeordnete Elemente
Keine.
Konfigurationsbeispiel
Im folgenden Konfigurationsbeispiel wird der Antwort ein „Cache-Control: no-cache“-HTTP-Header hinzugefügt, wodurch das Zwischenspeichern von Anforderungen deaktiviert wird.
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
</system.webServer>
</configuration>
Im folgenden Konfigurationsbeispiel wird der Antwort ein HTTP-Header „Expires: Tue, 19 Jan 2038 03:14:07 GMT“ hinzugefügt, der Anforderungen so konfiguriert, dass sie in mehreren Jahren ablaufen.
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseExpires"
httpExpires="Tue, 19 Jan 2038 03:14:07 GMT" />
</staticContent>
</system.webServer>
</configuration>
Beispielcode
Die folgenden Codebeispiele fügen der Antwort einen HTTP-Header „Cache-Control: no-cache“ hinzu, wodurch das Zwischenspeichern von Anforderungen deaktiviert wird.
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()
Die folgenden Codebeispiele fügen der Antwort einen HTTP-Header „Expires: Tue, 19 Jan 2038 03:14:07 GMT“ hinzu, der Anforderungen so konfiguriert, dass sie in mehreren Jahren ablaufen.
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()