Förhindra cachelagring i Internet Explorer

Varning

Supporten har upphört för det indragna skrivbordsprogrammet Internet Explorer 11 och det har inaktiveras permanent via en Microsoft Edge-uppdatering för vissa versioner av Windows 10. Mer information finns i Vanliga frågor och svar om indragning av skrivbordsprogrammet Internet Explorer 11.

I den här artikeln beskrivs användningen av HTTP-huvuden för att styra cachelagringen av webbsidor i Internet Explorer.

Ursprunglig produktversion: Internet Explorer
Ursprungligt KB-nummer: 234067

Sammanfattning

Du kan använda Microsoft Internet Information Server (IIS) för att enkelt markera mycket instabila eller känsliga sidor med hjälp av följande skript i den extrema början av de specifika ASP-sidorna (Active Server Pages):

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

Förfallodatum och rubriken Upphör att gälla

Vi rekommenderar starkt att alla webbservrar använder ett schema för upphörande av alla webbsidor. Det är en dålig praxis att en webbserver inte anger förfalloinformation via svarshuvudet HTTP Expires för varje resurs som returneras till begärande klienter. De flesta webbläsare och mellanliggande proxyservrar respekterar idag denna förfalloinformation och använder den för att öka effektiviteten i kommunikationen över nätverket.

Använd alltid huvudet Upphör att gälla för att ange den mest rimliga tiden när en viss fil på servern måste uppdateras av klienten. När sidorna uppdateras regelbundet är nästa uppdateringsperiod det mest effektiva svaret. Ta till exempel en daglig nyhetssida på Internet som uppdateras varje dag kl. 05.00. Webbservern för den här nyhetssidan bör returnera huvudet Förfaller med värdet 05.00 nästa dag. När det är klart behöver webbläsaren inte kontakta webbservern igen förrän sidan har ändrats.

Sidor som inte förväntas ändras bör markeras med ett förfallodatum på ungefär ett år.

I många fall har webbservrar en eller flera ej beständiga sidor på en server som innehåller information som kan komma att ändras omedelbart. Dessa sidor ska markeras av servern med värdet "-1" för rubriken Upphör att gälla. Vid framtida begäranden från användaren kontaktar Internet Explorer vanligtvis webbservern för uppdateringar av den sidan via en villkorsstyrd If-Modified-Since-begäran. Sidan finns dock kvar i diskcachen (tillfälliga Internetfiler). Och sidan används i lämpliga situationer utan att kontakta fjärrwebbservern, till exempel:

  • när knapparna BAKÅT och FRAMÅT används för att komma åt navigeringshistoriken.
  • när webbläsaren är i offlineläge.

Rubriken Cache-Control

Vissa sidor är dock så instabila eller känsliga att de inte kräver någon diskcachelagring. Därför stöder Internet Explorer HTTP 1.1-Cache-Control-huvudet. Det här huvudet förhindrar all cachelagring av en viss webbresurs när värdet no-cache anges av en HTTP 1.1-server.

Sidor som hålls borta från cachen är inte tillgängliga förrän webbläsaren kan rekonfigurera webbservern. Servrar bör därför använda Cache-Control-huvudet sparsamt. I de flesta fall är användningen av Upphör att gälla: -1 att föredra.

Pragma: No-Cache-rubriken

Äldre HTTP 1.0-servrar kan tyvärr inte använda Cache-Control-huvudet. För bakåtkompatibilitet med HTTP 1.0-servrar stöder Internet Explorer en särskild användning av HTTP Pragma: no-cache-huvudet. Om klienten kommunicerar med servern via en säker anslutning (https://) och servern returnerar ett Pragma: no-cache-huvud med svaret cachelagrar Inte Internet Explorer svaret.

Pragma: no-cache-huvudet var dock inte för det här ändamålet. Enligt SPECIFIKATIONERNA HTTP 1.0 och 1.1 definieras det här huvudet endast i kontexten för en begäran, inte ett svar. Den är avsedd för proxyservrar som kan förhindra att vissa viktiga begäranden når målwebbservern. För framtida program är Cache-Control-huvudet rätt sätt att kontrollera cachelagring.

HTTP-EQUIV META-taggar

HTML-sidor tillåter en särskild HTTP-EQUIV-form av META-taggen som anger specifika HTTP-huvuden inifrån HTML-dokumentet. Här är ett kort exempel på EN HTML-sida som använder både Pragma: no-cache och Expires: -1:

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

Pragma: ingen cache förhindrar endast cachelagring när den används via en säker anslutning. En Pragma: metataggen no-cache behandlas identiskt med Expires: -1 om den används på en icke-säker sida. Sidan cachelagras men markeras som omedelbart förfallen.

Cache-Control META HTTP-EQUIV-taggar ignoreras och har ingen effekt i Internet Explorer version 4 eller 5. Om du vill använda Cache-Control måste det här huvudet anges med HTTP-huvuden enligt beskrivningen i Cache-Control-avsnittet ovan.

Obs!

Användningen av HTTP-standardhuvuden är mycket att föredra framför META-taggar. META-taggar måste vanligtvis visas överst i AVSNITTET HTML HEAD. Och det finns minst ett känt problem med metataggen Pragma HTTP-EQUIV.

Serveralternativ för cachelagring

När Cache-Control-huvudet måste användas på icke-ASP-sidor kan det vara nödvändigt att använda alternativ i serverkonfigurationen för att lägga till det här huvudet automatiskt. Information om hur du lägger till HTTP-huvuden i serversvar för en viss katalog finns i serverdokumentet. Följ till exempel dessa steg i IIS 4:

  1. Starta IIS-hanteraren.
  2. Öppna standardwebbservern eller den aktuella webbservern i data- och tjänstträdet. Leta upp katalogen som innehåller det innehåll som behöver Cache-Control-huvudet.
  3. Öppna dialogrutan Egenskaper för katalogen.
  4. Välj fliken HTTP-huvuden .
  5. Välj knappen Lägg till i gruppen Anpassade HTTP-huvuden och lägg till Cache-Control för rubriknamnet och ingen cache för rubrikvärdet.

Det är inte en bra idé att använda det här huvudet globalt på hela webbservern. Begränsa dess användning enbart till innehåll som absolut inte får cachelagras på klienten.

Checklista för problem

Om du har använt teknikerna i den här artikeln och fortfarande har problem med cachelagring och Internet Explorer kan du gå igenom den här praktiska checklistan steg för steg innan du kontaktar Microsoft för teknisk support:

  • Använder du Cache-Control-huvudet med ASP-egenskapen Response.CacheControl eller via ett returnerat HTTP-huvud? Det är det enda sättet att verkligen förhindra cachelagring i Internet Explorer.
  • Använder du Internet Explorer 4.01 Service Pack 2 eller senare? Det finns inget sätt att helt förhindra cachelagring i tidigare versioner av webbläsaren.
  • Har du dubbelkollat att http 1.1 är aktiverat på webbservern och returnerar HTTP 1.1-svar till Internet Explorer? Cache-Control rubriker är ogiltiga i HTTP 1.0-svar.
  • Om du använder CGI/ISAPI/Servlets på serversidan följer du HTTP 1.1-specifikationen exakt, särskilt om CRLF-avslutning av HTTP-huvuden? I prestandaintresset är Internet Explorer vanligtvis oförlåtande mot svar som strider mot HTTP 1.1-specifikationen. Det resulterar vanligtvis i ignorerade huvuden eller rapporter om oväntade serverfel.
  • Är HTTP-huvudena rättstavade?

Se även