Client Cache <clientCache>

Panoramica

L'elemento <clientCache> dell'elemento <staticContent> specifica le intestazioni HTTP correlate alla cache inviate da IIS 7 e versioni successive ai client Web, che controllano il modo in cui i client Web e i server proxy memorizzano nella cache il contenuto restituito da IIS 7 e versioni successive.

Ad esempio, l'attributo httpExpires specifica una data e un'ora di scadenza del contenuto e IIS 7 e versioni successive aggiungerà un'intestazione HTTP "Expires" alla risposta. Il valore dell'attributo httpExpires deve essere una data e un'ora completamente formattati che segue la specifica in RFC 1123. Ad esempio:

Venerdì, 01 Gennaio 2010 12:00:00 GMT

Nota

Per usare l'attributo httpExpires , è necessario impostare il valore dell'attributo cacheControlMode su UseExpires.

La specifica HTTP 1.1 in Request For Comments (RFC) 2616 specifica diversi valori possibili per l'intestazione HTTP "Cache-Control", ad esempio "no-cache", "private", "public" e così via. Ognuno di questi valori di intestazione consente ai client Web e ai server proxy di sapere se devono memorizzare nella cache il contenuto:

  • Il contenuto che contiene un'intestazione "no-cache" non deve essere memorizzato nella cache da alcuna entità. - Il contenuto che contiene un'intestazione "privata" non deve essere memorizzato nella cache da un server proxy, ma può essere memorizzato nella cache da un client Web. - Il contenuto che contiene un'intestazione "pubblica" può essere memorizzato nella cache da qualsiasi entità.

    Nota

    L'elenco precedente non è completo: esistono molti valori aggiuntivi che possono essere specificati dall'intestazione "Cache-Control".

È possibile aggiungere direttive aggiuntive all'intestazione HTTP "Cache-Control", ad esempio "max-age", che specifica l'ora di scadenza esplicita per il contenuto. In IIS 7 la direttiva "max-age" viene configurata tramite l'attributo cacheControlMaxAge . Mentre le impostazioni "Expires" e "max-age" sono in qualche modo analoghe, la direttiva "max-age" assume la priorità su "Expires".

Nota

Per usare l'attributo cacheControlMaxAge , è necessario impostare il valore dell'attributo cacheControlMode su UseMaxAge.

Per altre informazioni sulle intestazioni di memorizzazione nella cache HTTP e sui formati di data/ora, vedere gli articoli di richiesta per commenti (RFC) seguenti:

  • RFC 1123 - "Requisiti per gli host Internet - Applicazione e supporto"
  • RFC 2616 - "Hypertext Transfer Protocol -- HTTP/1.1"

Compatibilità

Versione Note
IIS 10.0 L'elemento <clientCache> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <clientCache> non è stato modificato in IIS 8.5.
IIS 8,0 L'attributo setEtag è stato aggiunto per specificare se l'intestazione ETag HTTP viene calcolata e impostata.
IIS 7,5 L'elemento <clientCache> non è stato modificato in IIS 7.5.
IIS 7.0 L'elemento <clientCache> dell'elemento <staticContent> è stato introdotto in IIS 7.0.
IIS 6.0 L'elemento <clientCache> sostituisce le proprietà della metabase IIS 6.0 seguenti:
  • CacheControlCustom
  • CacheControlMaxAge
  • CacheControlNoCache
  • HttpExpires

Installazione

L'elemento <clientCache> dell'elemento è incluso nell'installazione <staticContent> predefinita di IIS 7 e versioni successive.

Procedure

Come configurare una data di scadenza della cache per un sito Web o un'applicazione

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Server 2008 o Windows Server 2008 R2:

      • Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Vista o Windows 7:

      • Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
      • Fare doppio clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni passare al sito, all'applicazione o alla directory per cui si vuole disabilitare la memorizzazione nella cache.

  3. Nel riquadro Home fare doppio clic su Intestazioni risposta HTTP.
    Screenshot che mostra il riquadro Home del sito Web predefinito con intestazioni di risposta H T T P selezionate.

  4. Nel riquadro Intestazioni risposta HTTP fare clic su Imposta intestazioni comuni ... nel riquadro Azioni .
    Screenshot che mostra il riquadro Intestazioni risposta H T T P nel gestore I S.

  5. Nella finestra di dialogo Imposta intestazioni di risposta HTTP comuni selezionare la casella per la scadenza del contenuto Web, selezionare l'opzione per scadere dopo un intervallo specifico o in un momento specifico e quindi fare clic su OK.
    Screenshot che mostra la finestra di dialogo Imposta intestazioni risposta T T P comuni. È selezionata l'opzione Abilita keep-alive H T T P.
    Screenshot che mostra la finestra di dialogo Imposta intestazioni risposta T T P comuni. Dopo l'opzione è selezionata nella casella di controllo Scadenza contenuto Web.

Come disabilitare la memorizzazione nella cache per un sito Web o un'applicazione

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Server 2008 o Windows Server 2008 R2:

      • Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Vista o Windows 7:

      • Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
      • Fare doppio clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni passare al sito, all'applicazione o alla directory per cui si vuole disabilitare la memorizzazione nella cache.

  3. Nel riquadro Home fare doppio clic su Intestazioni risposta HTTP.
    Screenshot che mostra il riquadro Home del sito Web predefinito. È selezionata l'opzione Intestazioni risposta T T P.

  4. Nel riquadro Intestazioni risposta HTTP fare clic su Imposta intestazioni comuni ... nel riquadro Azioni .
    Screenshot che mostra il riquadro Intestazioni risposta H T T P.

  5. Nella finestra di dialogo Imposta intestazioni di risposta HTTP comuni selezionare la casella per la scadenza del contenuto Web, selezionare Immediatamente e quindi fare clic su OK.
    Screenshot che mostra la finestra di dialogo Imposta intestazioni risposta T T P comuni. Immediatamente è selezionata nella casella di controllo Scadenza contenuto Web.

Configurazione

Attributi

Attributo Descrizione
cacheControlCustom Attributo stringa facoltativo.

Specifica le direttive di controllo della cache HTTP 1.1 personalizzate.
cacheControlMaxAge Attributo timeSpan facoltativo.

Specifica la validità massima, espressa in secondi, del valore del controllo cache.

Il valore predefinito è 1.00:00:00 (1 giorno).
cacheControlMode Attributo di enumerazione facoltativo.

Specifica la modalità da utilizzare per la memorizzazione nella cache del client.

L'attributo cacheControlMode può essere uno dei valori possibili seguenti.

Il valore predefinito è NoControl.
Valore Descrizione
NoControl Non aggiunge un'intestazione Cache-Control o Expires alla risposta.

Il valore numerico è 0.
DisableCache Aggiunge un'intestazione Cache-Control: no-cache alla risposta.

Il valore numerico è 1.
UseMaxAge Aggiunge un'intestazione Cache-Control: max-age=<nnn> alla risposta in base al valore specificato nell'attributo CacheControlMaxAge .

Il valore numerico è 2.
UseExpires Aggiunge un'intestazione Expires: <date> alla risposta in base alla data specificata nell'attributo httpExpires .

Il valore numerico è 3.
httpExpires Attributo stringa facoltativo.

Specifica la data e l'ora dopo la quale viene considerata non aggiornata una pagina memorizzata nella cache nel client. La data e l'ora vengono formattate in base alla specifica in Richiesta di commenti 1123. Il valore viene restituito al browser nell'intestazione del file HTML. L'agente utente confronta il valore specificato con la data corrente per determinare se visualizzare una pagina memorizzata nella cache o richiedere una pagina aggiornata dal server.
setEtag Attributo booleano facoltativo.

Specifica se l'intestazione ETag HTTP viene calcolata e impostata. L'intestazione ETag viene usata per la convalida della cache Web e consente a un server Web di non dover inviare una risposta completa se non sono state apportate modifiche al contenuto. setEtag può essere impostato nell'Editor di configurazione nel percorso system.webServer/staticContent.

Il valore predefinito è true.

Elementi figlio

Nessuno.

Esempio di configurazione

Nell'esempio di configurazione seguente viene aggiunta un'intestazione HTTP "Cache-Control: no-cache" alla risposta, disabilitando così la memorizzazione nella cache delle richieste.

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

Nell'esempio di configurazione seguente viene aggiunta un'intestazione HTTP "Expires: Mar, 19 Jan 2038 03:14:07 GMT" alla risposta, che configura le richieste per scadere da diversi anni.

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

Codice di esempio

Gli esempi di codice seguenti aggiungono un'intestazione HTTP "Cache-Control: no-cache" alla risposta, disabilitando così la memorizzazione nella cache delle richieste.

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

Gli esempi di codice seguenti aggiungono un'intestazione HTTP "Expires: Mar, 19 Jan 2038 03:14:07 GMT" alla risposta, che configura le richieste per scadere da diversi anni.

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