Partager via


Cache du client <clientCache>

Vue d’ensemble

L’élément <clientCache> de l’élément <staticContent> spécifie les en-têtes HTTP liés au cache qu’IIS 7 et versions ultérieures envoient aux clients web, qui contrôlent la façon dont les clients web et les serveurs proxy doivent mettre en cache le contenu retourné par IIS 7 et versions ultérieures.

Par exemple, l’attribut httpExpires spécifie une date et une heure d’expiration du contenu, et IIS 7 et versions ultérieures ajoutent un en-tête HTTP « Expires » à la réponse. La valeur de l’attribut httpExpires doit être une date et une heure entièrement mises en forme conformément à la spécification dans le document RFC 1123. Par exemple :

Fri, 01 Jan 2010 12:00:00 GMT

Remarque

Pour utiliser l’attribut httpExpires, vous devez définir la valeur de l’attribut cacheControlMode sur UseExpires.

La spécification HTTP 1.1 dans le document RFC (Request For Comments) 2616 spécifie les différentes valeurs possibles pour l’en-tête HTTP « Cache-Control », par exemple, « no-cache », « private », « public », etc. Chacune de ces valeurs d’en-tête permet aux clients web et aux serveurs proxy de savoir s’ils doivent mettre en cache le contenu :

  • Le contenu qui comporte un en-tête « no-cache » ne doit être mis en cache par aucune entité. - Le contenu qui comporte un en-tête « private » ne doit pas être mis en cache par un serveur proxy, mais peut être mis en cache par un client web. - Le contenu qui comporte un en-tête « public » peut être mis en cache par n’importe quelle entité.

    Remarque

    La liste ci-dessus n’est pas complète : beaucoup d’autres valeurs peuvent être spécifiées par l’en-tête « Cache-Control ».

Il est possible d’ajouter des directives supplémentaires à l’en-tête HTTP « Cache-Control », par exemple « max-age », qui spécifie l’heure d’expiration explicite du contenu. Dans IIS 7, la directive « max-age » est configurée avec l’attribut cacheControlMaxAge. Les paramètres « Expires » et « max-age » sont à peu près analogues, mais la directive « max-age » est prioritaire sur « Expires ».

Remarque

Pour utiliser l’attribut cacheControlMaxAge, vous devez définir la valeur de l’attribut cacheControlMode sur UseMaxAge.

Pour plus d’informations sur les en-têtes de mise en cache HTTP et les formats date/heure, consultez les articles RFC (Request For Comments) suivants :

  • RFC 1123 : « Requirements for Internet Hosts -- Application and Support » (Configuration requise pour les hôtes Internet – Application et support)
  • RFC 2616 : « Hypertext Transfer Protocol -- HTTP/1.1 » (Protocole HTTP – HTTP/1.1)

Compatibilité

Version Notes
IIS 10.0 L’élément <clientCache> n’a fait l’objet d’aucune modification dans IIS 10.0.
IIS 8.5 L’élément <clientCache> n’a fait l’objet d’aucune modification dans IIS 8.5.
IIS 8.0 L’attribut setEtag a été ajouté pour spécifier si l’en-tête HTTP ETag est calculé et défini.
IIS 7.5 L’élément <clientCache> n’a fait l’objet d’aucune modification dans IIS 7.5.
IIS 7.0 L’élément <clientCache> de l’élément <staticContent> a été introduit dans IIS 7.0.
IIS 6.0 L’élément <clientCache> remplace les propriétés de métabase IIS 6.0 suivantes :
  • CacheControlCustom
  • CacheControlMaxAge
  • CacheControlNoCache
  • HttpExpires

Programme d’installation

L’élément <clientCache> de l’élément <staticContent> est inclus dans l’installation par défaut d’IIS 7 et versions ultérieures.

Procédure

Configurer une date d’expiration du cache pour un site web ou une application

  1. Ouvrez le Gestionnaire Internet Information Services (IIS) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire Internet Services (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis cliquez sur Panneau de configuration.
      • Double-cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Services (IIS).
  2. Dans le volet Connexions, accédez au site, à l’application ou au répertoire pour lequel vous souhaitez désactiver la mise en cache.

  3. Dans le volet Accueil, double-cliquez sur En-têtes de réponse HTTP.
    Screenshot that shows the Default Web Site Home pane, with H T T P Response Headers selected.

  4. Dans le volet En-têtes de réponse HTTP, dans le volet Actions, cliquez sur Définir les en-têtes communs....
    Screenshot that shows the H T T P Response Headers pane in the I I S Manager.

  5. Dans la boîte de dialogue Définir les en-têtes de réponse HTTP communs, cochez la case Expiration du contenu Web, sélectionnez l’option pour une expiration après un intervalle spécifique ou à un moment précis, puis cliquez sur 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.

Désactiver la mise en cache pour un site web ou une application

  1. Ouvrez le Gestionnaire Internet Information Services (IIS) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire Internet Services (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis cliquez sur Panneau de configuration.
      • Double-cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Services (IIS).
  2. Dans le volet Connexions, accédez au site, à l’application ou au répertoire pour lequel vous souhaitez désactiver la mise en cache.

  3. Dans le volet Accueil, double-cliquez sur En-têtes de réponse HTTP.
    Screenshot that shows the Default Web Site Home pane. H T T P Response Headers is selected.

  4. Dans le volet En-têtes de réponse HTTP, dans le volet Actions, cliquez sur Définir les en-têtes communs....
    Screenshot that shows the H T T P Response Headers pane.

  5. Dans la boîte de dialogue Définir les en-têtes de réponse HTTP communs, cochez la case Expiration du contenu Web, sélectionnez l’option Immédiatement, puis cliquez sur OK.
    Screenshot that shows the Set Common H T T P Response Headers dialog box. Immediately is selected under the Expire Web content checkbox.

Configuration

Attributs

Attribut Description
cacheControlCustom Attribut de chaîne facultatif.

Spécifie les directives personnalisées du contrôle de cache HTTP 1.1.
cacheControlMaxAge Attribut timeSpan facultatif.

Spécifie l’âge maximal (en secondes) de la valeur du contrôle de cache.

La valeur par défaut est 1.00:00:00 (1 jour).
cacheControlMode Attribut enum facultatif.

Spécifie le mode à utiliser pour la mise en cache du client.

L’attribut cacheControlMode peut avoir l’une des valeurs suivantes.

Par défaut, il s’agit de NoControl.
Valeur Description
NoControl N’ajoute pas d’en-tête Cache-Control ou Expires à la réponse.

La valeur numérique est 0.
DisableCache Ajoute un en-tête Cache-Control: no-cache à la réponse.

La valeur numérique est 1.
UseMaxAge Ajoute un en-tête Cache-Control: max-age=<nnn> à la réponse en fonction de la valeur spécifiée dans l’attribut CacheControlMaxAge.

La valeur numérique est 2.
UseExpires Ajoute un en-tête Expires: <date> à la réponse en fonction de la date spécifiée dans l’attribut httpExpires.

La valeur numérique est 3.
httpExpires Attribut de chaîne facultatif.

Spécifie la date et l’heure après lesquelles une page mise en cache sur le client est considérée comme périmée. (La date et l’heure sont mises en forme conformément à la spécification du document RFC 1123.) La valeur est retournée au navigateur dans l’en-tête de fichier HTML. L’agent utilisateur compare la valeur donnée à la date actuelle pour déterminer s’il faut afficher une page mise en cache, ou obtenir une page mise à jour du serveur.
setEtag Attribut booléen facultatif.

Spécifie si l’en-tête HTTP ETag est calculé et défini. L’en-tête ETag sert à la validation du cache web, et évite à un serveur web d’avoir à envoyer une réponse complète si aucune modification n’a été apportée au contenu. setEtag peut être défini dans l’éditeur de configuration, dans le chemin system.webServer/staticContent.

La valeur par défaut est true.

Éléments enfants

Aucune.

Exemple Configuration

L’exemple de configuration suivant ajoute un en-tête HTTP « Cache-Control: no-cache » à la réponse, ce qui désactive la mise en cache des demandes.

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

L’exemple de configuration suivant ajoute un en-tête HTTP « Expires: Tue, 19 Jan 2038 03:14:07 GMT » à la réponse, ce qui configure les demandes pour expirer dans plusieurs années à partir de maintenant.

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

Exemple de code

Les exemples de code suivants ajoutent un en-tête HTTP « Cache-Control: no-cache » à la réponse, ce qui désactive la mise en cache des demandes.

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()

Les exemples de code suivants ajoutent un en-tête HTTP « Expires: Tue, 19 Jan 2038 03:14:07 GMT » à la réponse, ce qui configure les demandes pour expirer dans plusieurs années à partir de maintenant.

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()