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 :
|
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
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).
Dans le volet Connexions, accédez au site, à l’application ou au répertoire pour lequel vous souhaitez désactiver la mise en cache.
Dans le volet Accueil, double-cliquez sur En-têtes de réponse HTTP.
Dans le volet En-têtes de réponse HTTP, dans le volet Actions, cliquez sur Définir les en-têtes communs....
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.
Désactiver la mise en cache pour un site web ou une application
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).
Dans le volet Connexions, accédez au site, à l’application ou au répertoire pour lequel vous souhaitez désactiver la mise en cache.
Dans le volet Accueil, double-cliquez sur En-têtes de réponse HTTP.
Dans le volet En-têtes de réponse HTTP, dans le volet Actions, cliquez sur Définir les en-têtes communs....
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.
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 .
|
||||||||||
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()