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:
|
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
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).
Nel riquadro Connessioni passare al sito, all'applicazione o alla directory per cui si vuole disabilitare la memorizzazione nella cache.
Nel riquadro Home fare doppio clic su Intestazioni risposta HTTP.
Nel riquadro Intestazioni risposta HTTP fare clic su Imposta intestazioni comuni ... nel riquadro Azioni .
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.
Come disabilitare la memorizzazione nella cache per un sito Web o un'applicazione
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).
Nel riquadro Connessioni passare al sito, all'applicazione o alla directory per cui si vuole disabilitare la memorizzazione nella cache.
Nel riquadro Home fare doppio clic su Intestazioni risposta HTTP.
Nel riquadro Intestazioni risposta HTTP fare clic su Imposta intestazioni comuni ... nel riquadro Azioni .
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.
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 .
|
||||||||||
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()