Condividi tramite


Come impedire la memorizzazione nella cache in Internet Explorer

Avviso

L'applicazione desktop Internet Explorer 11, ritirata e fuori supporto, è stata disabilitata in modo permanente tramite un aggiornamento di Microsoft Edge su alcune versioni di Windows 10. Per altre informazioni, vedere Domande frequenti sul ritiro delle app desktop di Internet Explorer 11.

Questo articolo descrive l'uso di intestazioni HTTP per controllare la memorizzazione nella cache delle pagine Web in Internet Explorer.

Versione originale del prodotto: Internet Explorer
Numero KB originale: 234067

Riepilogo

È possibile usare Microsoft Internet Information Server (IIS) per contrassegnare facilmente pagine altamente volatili o sensibili usando lo script seguente all'estrema inizio delle pagine ASP (Active Server Pages) specifiche:

<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>

Scadenza e intestazione Expires

È consigliabile che tutti i server Web usino uno schema per la scadenza di tutte le pagine Web. È consigliabile che un server Web non fornisca informazioni sulla scadenza tramite l'intestazione di risposta Scadenza HTTP per ogni risorsa restituita ai client che richiedono. La maggior parte dei browser e dei proxy intermedi oggi rispetta queste informazioni di scadenza e la utilizza per aumentare l'efficienza delle comunicazioni in rete.

Usare sempre l'intestazione Expires per specificare il momento più ragionevole in cui un particolare file nel server deve essere aggiornato dal client. Quando le pagine vengono aggiornate regolarmente, il periodo successivo per l'aggiornamento è la risposta più efficiente. Prendi, ad esempio, una pagina di notizie giornaliera su Internet che viene aggiornata ogni giorno alle 17:00. Il server Web per questa pagina di notizie deve restituire un'intestazione Expires con un valore per 5 A.M. il giorno successivo. Al termine, il browser non deve contattare di nuovo il server Web finché la pagina non viene modificata.

Le pagine che non devono essere modificate devono essere contrassegnate con una data di scadenza di circa un anno.

In molti casi, i server Web dispongono di una o più pagine volatili in un server che contengono informazioni soggette a modifiche immediate. Queste pagine devono essere contrassegnate dal server con il valore "-1" per l'intestazione Expires. In caso di richieste future da parte dell'utente, Internet Explorer in genere contatta il server Web per gli aggiornamenti a tale pagina tramite una richiesta condizionale If-Modified-Since. Tuttavia, la pagina rimane nella cache del disco (File Internet temporanei). E la pagina viene usata in situazioni appropriate senza contattare il server Web remoto, ad esempio:

  • quando i pulsanti BACK e FORWARD vengono usati per accedere alla cronologia di spostamento.
  • quando il browser è in modalità offline.

Intestazione Cache-Control

Alcune pagine, tuttavia, sono così volatili o sensibili che non richiedono la memorizzazione nella cache del disco. A questo scopo, Internet Explorer supporta l'intestazione HTTP 1.1 Cache-Control. Questa intestazione impedisce la memorizzazione nella cache di una determinata risorsa Web quando il valore no-cache viene specificato da un server HTTP 1.1.

Le pagine mantenute fuori dalla cache non sono accessibili finché il browser non può riconnettere il server Web. Pertanto, i server devono usare l'intestazione Cache-Control con moderazione. Nella maggior parte dei casi, l'uso di Expires: -1 è preferibile.

Intestazione Pragma: No-Cache

Sfortunatamente, i server HTTP 1.0 legacy non possono usare l'intestazione Cache-Control. Ai fini della compatibilità con le versioni precedenti con i server HTTP 1.0, Internet Explorer supporta un utilizzo speciale del Pragma HTTP: intestazione no-cache. Se il client comunica con il server tramite una connessione sicura (https://) e il server restituisce un pragma: intestazione no-cache con la risposta, Internet Explorer non memorizza nella cache la risposta.

Tuttavia, pragma: intestazione no-cache non era per questo scopo. In base alle specifiche HTTP 1.0 e 1.1, questa intestazione viene definita solo nel contesto di una richiesta, non una risposta. È destinato ai server proxy che potrebbero impedire a determinate richieste importanti di raggiungere il server Web di destinazione. Per le applicazioni future, l'intestazione Cache-Control è il mezzo appropriato per controllare la memorizzazione nella cache.

Tag META HTTP-EQUIV

Le pagine HTML consentono una speciale forma HTTP-EQUIV del tag META che specifica intestazioni HTTP specifiche dall'interno del documento HTML. Di seguito è riportato un breve esempio di pagina HTML che usa pragma: no-cache e expires: -1:

<HTML>
    <HEAD>
        <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
        <META HTTP-EQUIV="Expires" CONTENT="-1">
    </HEAD>
<BODY>
</BODY>
</HTML>

Pragma: no-cache impedisce la memorizzazione nella cache solo quando viene usata tramite una connessione sicura. Pragma: il tag META no-cache viene trattato in modo identico a Expires: -1 se usato in una pagina non sicura. La pagina verrà memorizzata nella cache, ma contrassegnata come immediatamente scaduta.

I tag META HTTP-EQUIV del controllo cache vengono ignorati e non hanno alcun effetto nelle versioni 4 o 5 di Internet Explorer. Per usare Cache-Control, questa intestazione deve essere specificata usando intestazioni HTTP come descritto nella sezione Cache-Control precedente.

Note

L'uso di intestazioni HTTP standard è molto preferibile rispetto ai tag META. I tag META in genere devono essere visualizzati nella parte superiore della sezione HTML HEAD. E c'è almeno un problema noto con il tag PRAGma HTTP-EQUIV META.

Opzioni del server per la memorizzazione nella cache

Quando l'intestazione Cache-Control deve essere usata in pagine non ASP, potrebbe essere necessario usare le opzioni nella configurazione del server per aggiungere automaticamente questa intestazione. Per il processo di aggiunta di intestazioni HTTP alle risposte del server per una determinata directory, vedere il documento del server. Ad esempio, in IIS 4 seguire questa procedura:

  1. Avviare Gestione IIS.
  2. Nell'albero computer e servizi aprire il server Web predefinito o il server Web in questione. Trovare la directory contenente il contenuto che richiede l'intestazione Cache-Control.
  3. Aprire la finestra di dialogo Proprietà per tale directory.
  4. Selezionare la scheda Intestazioni HTTP.
  5. Selezionare il pulsante Aggiungi nel gruppo Intestazioni HTTP personalizzate e aggiungere Cache-Control per il nome dell'intestazione e no-cache per il valore dell'intestazione.

Non è consigliabile usare questa intestazione a livello globale nell'intero server Web. Limitarne l'uso esclusivamente al contenuto che non deve assolutamente essere memorizzato nella cache nel client.

Elenco di controllo dei problemi

Se hai applicato le tecniche in questo articolo e hai ancora problemi con la memorizzazione nella cache e Internet Explorer, consulta questo pratico elenco di controllo passo dopo passo prima di contattare Microsoft per assistenza tecnica:

  • Si usa l'intestazione Cache-Control con la proprietà ASP Response.CacheControl o tramite un'intestazione HTTP restituita? È l'unico modo per impedire realmente la memorizzazione nella cache in Internet Explorer.
  • Si usa Internet Explorer 4.01 Service Pack 2 o versione successiva? Non è possibile impedire completamente la memorizzazione nella cache nelle versioni precedenti del browser.
  • È stato verificato che il server Web disponga di HTTP 1.1 attivato e che restituisca le risposte HTTP 1.1 a Internet Explorer? Le intestazioni di Cache-Control non sono valide nelle risposte HTTP 1.0.
  • Se si usano CGI/ISAPI/Servlets sul lato server, si sta seguendo esattamente la specifica HTTP 1.1, in particolare sulla terminazione CRLF delle intestazioni HTTP? Nell'interesse delle prestazioni, Internet Explorer è in genere insoddisponibile delle risposte che violano la specifica HTTP 1.1. In genere genera intestazioni o report ignorati di errori imprevisti del server.
  • Le intestazioni HTTP sono digitate correttamente?

Vedi anche