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:
  • CacheControlCustom
  • CacheControlMaxAge
  • CacheControlNoCache
  • HttpExpires

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

  1. Ö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.
  2. Navigieren Sie im Bereich Verbindungen zu der Site, Anwendung oder dem Verzeichnis, für das Sie Zwischenspeicherung deaktivieren möchten.

  3. Doppelklicken Sie im Bereich Start auf HTTP-Antwortheader.
    Screenshot that shows the Default Web Site Home pane, with H T T P Response Headers selected.

  4. Klicken Sie im Bereich HTTP-Antwortheader im Bereich Aktionen auf Allgemeine Header festlegen....
    Screenshot that shows the H T T P Response Headers pane in the I I S Manager.

  5. 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.
    Screenshot that shows the Set Common H T T P Response Headers dialog box. Enable H T T P keep alive is selected.
    Screenshot that shows the Set Common H T T P Response Headers dialog box. After is selected under the Expire Web content checkbox.

So deaktivieren Sie die Zwischenspeicherung für eine Website oder Anwendung

  1. Ö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.
  2. Navigieren Sie im Bereich Verbindungen zu der Site, Anwendung oder dem Verzeichnis, für das Sie Zwischenspeicherung deaktivieren möchten.

  3. Doppelklicken Sie im Bereich Start auf HTTP-Antwortheader.
    Screenshot that shows the Default Web Site Home pane. H T T P Response Headers is selected.

  4. Klicken Sie im Bereich HTTP-Antwortheader im Bereich Aktionen auf Allgemeine Header festlegen....
    Screenshot that shows the H T T P Response Headers pane.

  5. 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.
    Screenshot that shows the Set Common H T T P Response Headers dialog box. Immediately is selected under the Expire Web content checkbox.

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.
Wert Beschreibung
NoControl Fügt der Antwort keinen Cache-Control- oder Expires-Header hinzu.

Der numerische Wert ist 0.
DisableCache Fügt der Antwort ein Cache-Control: no-cache-Header zur Antwort hinzu.

Der numerische Wert ist 1.
UseMaxAge Fügt einen „Cache-Control: max-age=<nnn>“-Header anhand des im Attribut CacheControlMaxAge angegebenen Werts hinzu.

Der numerische Wert ist 2.
UseExpires Fügt der Antwort basierend auf dem im httpExpires-Attribut angegebenen Datum einen <httpExpires>-Header hinzu.

Der numerische Wert ist 3.
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()