In cache opslaan voorkomen in Internet Explorer

Waarschuwing

De buiten gebruik gestelde, niet-ondersteund Internet Explorer 11-bureaubladtoepassing is permanent uitgeschakeld via een Microsoft Edge-update voor bepaalde versies van Windows 10. Zie Veelgestelde vragen over buitengebruikstelling van bureaublad-apps in Internet Explorer 11 voor meer informatie.

In dit artikel wordt het gebruik van HTTP-headers beschreven om de cache van webpagina's in Internet Explorer te beheren.

Oorspronkelijke productversie: Internet Explorer
Origineel KB-nummer: 234067

Samenvatting

U kunt Microsoft Internet Information Server (IIS) gebruiken om eenvoudig zeer vluchtige of gevoelige pagina's te markeren met behulp van het volgende script aan het uiterste begin van de specifieke ASP-pagina's (Active Server Pages):

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

Vervaldatum en de header Verloopt

Het wordt ten zeerste aanbevolen dat alle webservers een schema gebruiken voor het verlopen van alle webpagina's. Het is een slechte gewoonte voor een webserver om geen verloopgegevens te verstrekken via de HTTP Expires-antwoordheader voor elke resource die wordt geretourneerd aan aanvragende clients. De meeste browsers en tussenliggende proxy's respecteren deze verloopinformatie en gebruiken deze om de efficiëntie van de communicatie via het netwerk te verhogen.

Gebruik altijd de header Verloopt om de meest redelijke tijd op te geven wanneer een bepaald bestand op de server moet worden bijgewerkt door de client. Wanneer pagina's regelmatig worden bijgewerkt, is de volgende periode voor bijwerken de meest efficiënte reactie. Neem bijvoorbeeld een pagina met dagelijks nieuws op internet die elke dag om 5.00 uur wordt bijgewerkt. De webserver voor deze nieuwspagina retourneert de volgende dag de header Expires met een waarde voor 5.00 uur. Wanneer dit is gebeurd, hoeft de browser pas opnieuw contact op te maken met de webserver totdat de pagina is gewijzigd.

Pagina's die naar verwachting niet worden gewijzigd, moeten worden gemarkeerd met een vervaldatum van ongeveer één jaar.

In veel gevallen hebben webservers een of meer vluchtige pagina's op een server met informatie die onmiddellijk kan worden gewijzigd. Deze pagina's moeten door de server worden gemarkeerd met de waarde '-1' voor de header Verloopt. Bij toekomstige aanvragen van de gebruiker neemt Internet Explorer meestal contact op met de webserver voor updates van die pagina via een voorwaardelijke If-Modified-Since-aanvraag. De pagina blijft echter in de schijfcache (tijdelijke internetbestanden). En de pagina wordt gebruikt in geschikte situaties zonder contact op te maken met de externe webserver, zoals:

  • wanneer de knoppen VORIGE en VOLGENDE worden gebruikt om toegang te krijgen tot de navigatiegeschiedenis.
  • wanneer de browser zich in de offlinemodus bevindt.

De Cache-Control-header

Bepaalde pagina's zijn echter zo vluchtig of gevoelig dat ze geen schijfcache vereisen. Hiertoe ondersteunt Internet Explorer de HTTP 1.1 Cache-Control-header. Deze header voorkomt dat een bepaalde webresource in de cache wordt opgeslagen wanneer de waarde zonder cache wordt opgegeven door een HTTP 1.1-server.

Pagina's die buiten de cache worden gehouden, zijn pas toegankelijk als de browser opnieuw contact kan opnemen met de webserver. Servers moeten dus de Cache-Control-header spaarzaam gebruiken. In de meeste gevallen heeft het gebruik van Verloopt: -1 de voorkeur.

De koptekst Pragma: No-Cache

Helaas kunnen verouderde HTTP 1.0-servers de Cache-Control-header niet gebruiken. Voor achterwaartse compatibiliteit met HTTP 1.0-servers ondersteunt Internet Explorer een speciaal gebruik van de HTTP Pragma: no-cache header. Als de client met de server communiceert via een beveiligde verbinding (https://) en de server een Pragma: no-cache-header retourneert met het antwoord, wordt het antwoord niet in de cache opgeslagen in Internet Explorer.

De Pragma: no-cache header was echter niet voor dit doel. Volgens de HTTP 1.0- en 1.1-specificaties wordt deze header alleen gedefinieerd in de context van een aanvraag, niet in een antwoord. Het is bedoeld voor proxyservers die kunnen voorkomen dat bepaalde belangrijke aanvragen de doelwebserver bereiken. Voor toekomstige toepassingen is de Cache-Control-header de juiste manier om caching te beheren.

HTTP-EQUIV-METAtags

HTML-pagina's maken een speciale HTTP-EQUIV-vorm van de META-tag mogelijk die bepaalde HTTP-headers in het HTML-document specificeert. Hier volgt een kort voorbeeld van een HTML-pagina die zowel Pragma: no-cache als Expires: -1 gebruikt:

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

Pragma: no-cache voorkomt dat caching alleen wordt gebruikt via een beveiligde verbinding. Een Meta-tag Pragma: no-cache wordt identiek behandeld als Verloopt: -1 als deze wordt gebruikt op een niet-beveiligde pagina. De pagina wordt in de cache opgeslagen, maar gemarkeerd als onmiddellijk verlopen.

Cache-Control META HTTP-EQUIV-tags worden genegeerd en hebben geen effect in Internet Explorer versie 4 of 5. Als u Cache-Control wilt gebruiken, moet deze header worden opgegeven met BEHULP van HTTP-headers, zoals beschreven in de sectie Cache-Control hierboven.

Opmerking

Het gebruik van standaard-HTTP-headers heeft veel de voorkeur boven META-tags. META-tags moeten meestal boven aan de sectie HTML HEAD worden weergegeven. En er is ten minste één bekend probleem met de Pragma HTTP-EQUIV META-tag.

Serveropties voor caching

Wanneer de Cache-Control-header moet worden gebruikt op niet-ASP-pagina's, kan het nodig zijn om opties in de serverconfiguratie te gebruiken om deze header automatisch toe te voegen. Raadpleeg het serverdocument voor het toevoegen van HTTP-headers aan serverantwoorden voor een bepaalde map. Voer in IIS 4 bijvoorbeeld de volgende stappen uit:

  1. Start IIS-beheer.
  2. Open in de structuur computer en services de standaardwebserver of de desbetreffende webserver. Zoek de map met de inhoud die de Cache-Control-header nodig heeft.
  3. Open het dialoogvenster Eigenschappen voor die map.
  4. Selecteer het tabblad HTTP-headers .
  5. Selecteer de knop Toevoegen in de groep Aangepaste HTTP-headers en voeg Cache-Control toe voor de headernaam en geen cache voor de headerwaarde.

Het is geen goed idee om deze header globaal te gebruiken op de hele webserver. Beperk het gebruik ervan uitsluitend tot inhoud die absoluut niet op de client in de cache mag worden opgeslagen.

Controlelijst voor problemen

Als u de technieken in dit artikel hebt toegepast en u nog steeds problemen ondervindt met caching en Internet Explorer, raadpleegt u deze handige controlelijst stap voor stap voordat u contact opneemt met Microsoft voor technische ondersteuning:

  • Gebruikt u de Cache-Control-header met de ASP-eigenschap Response.CacheControl of via een geretourneerde HTTP-header? Dit is de enige manier om caching in Internet Explorer echt te voorkomen.
  • Gebruikt u Internet Explorer 4.01 Service Pack 2 of hoger? Het is niet mogelijk om in eerdere versies van de browser de cache volledig te voorkomen.
  • Hebt u gecontroleerd of HTTP 1.1 is ingeschakeld op uw webserver en of HTTP 1.1-antwoorden worden geretourneerd naar Internet Explorer? Cache-Control headers zijn ongeldig in HTTP 1.0-antwoorden.
  • Als u CGI/ISAPI/Servlets aan de serverzijde gebruikt, volgt u de HTTP 1.1-specificatie dan precies, met name over CRLF-beëindiging van HTTP-headers? In het belang van de prestaties is Internet Explorer doorgaans niet in staat antwoorden te geven die in strijd zijn met de HTTP 1.1-specificatie. Dit resulteert meestal in genegeerde headers of rapporten van onverwachte serverfouten.
  • Zijn de HTTP-headers correct gespeld?

Zie ook