Meer informatie
Verloop en de Expires-header
Het wordt ten zeerste aangeraden bij alle webservers een schema voor het verloop van alle webpagina's te gebruiken. Een webserver moet voor elke bron die wordt geretourneerd naar clients die de bron hebben aangevraagd, via de HTTP Expires-antwoordheader informatie over het verloop aanleveren. De meeste browsers en tussenliggende proxy's respecteren deze informatie over het verloop en gebruiken deze informatie om de efficiëntie van de communicatie via het netwerk te verbeteren.
De Expires-header moet altijd worden gebruikt om de meest redelijke tijd op te geven waarop een bepaald bestand op de server moet worden bijgewerkt door de client. Wanneer pagina's regelmatig worden bijgewerkt, is de volgende periode voor het bijwerken de meest efficiënte reactie. Een voorbeeld hiervan is een dagelijkse nieuwspagina op internet die elke dag om vijf uur 's morgens wordt bijgewerkt. De webserver voor deze nieuwspagina moet een Expires-header met een waarde voor vijf uur 's morgens de volgende dag retourneren. De browser hoeft daarna pas weer contact met de webserver op te nemen wanneer de pagina is gewijzigd.
Pagina's die niet hoeven te worden bijgewerkt, kunnen het beste worden gemarkeerd met een verloopdatum van ongeveer één jaar.
In veel gevallen staan er op webservers een of meer vluchtige pagina's waarvan de inhoud heel snel kan veranderen. Dergelijke pagina's moeten door de server met een waarde '-1' voor de Expires-header worden gemarkeerd. Als een gebruiker een pagina opvraagt, zoekt Internet Explorer doorgaans via een voorwaardelijk verzoek Als-Gewijzigd-Sinds op de webserver naar een bijgewerkte versie van die pagina. De pagina blijft echter in de schijfcache staan (Tijdelijke Internet-bestanden) en wordt op verzoek opgehaald zonder dat daarvoor verbinding met de externe webserver hoeft te worden gemaakt, zoals wanneer pagina's worden bekeken met de knoppen Vorige en Volgende of wanneer de browser off line wordt gebruikt.
De header 'Cache-Control'
Bepaalde pagina's zijn echter zo vluchtig of gevoelig dat deze niet in de schijfcache worden geplaatst. Hiervoor ondersteunt Internet Explorer de HTTP 1.1-header 'Cache-Control' waarmee wordt voorkomen dat een bepaalde webbron niet in het cachegeheugen wordt geplaatst als de waarde 'no-cache' door een HTTP 1.1-server is opgegeven.
Omdat pagina's buiten een cache alleen kunnen worden geopend als de browser verbinding met de webserver maakt, moet de header 'Cache-Control' mondjesmaat op servers worden gebruikt. Doorgaans kan het beste 'Expires: -1' worden gebruikt.
De header 'Pragma: No-Cache'
De header 'Cache-Control' kan helaas niet door oude HTTP 1.0-servers worden gebruikt. Voor achterwaartse compatibiliteit met HTTP 1.0-servers ondersteunt Explorer een speciaal gebruik van de HTTP-header 'Pragma: No-Cache'. Als de client via een veilige verbinding (https://) met de server communiceert en de server retourneert een header 'Pragma: No-Cache' zonder de reactie, wordt de reactie niet door Internet Explorer in het cachegeheugen geplaatst.
De header 'Pragma: No-Cache' is hier echter niet voor bedoeld. Volgens de specificaties van HTTP 1.0 en 1.1 wordt deze header gedefinieerd in de context van een verzoek en niet in de reactie, en is de header bedoeld voor proxyservers die er de oorzaak van kunnen zijn dat bepaalde belangrijke verzoeken niet op de doelwebserver aankomen. Voor nieuwe toepassingen is de header 'Cache-Control' de juiste manier om caching te controleren.
HTTP-EQUIV META-labels
Bij HTML-pagina's is een speciale HTTP-EQUIV-vorm van het META-label mogelijk waarmee bepaalde HTTP-headers vanuit het HTML-document kunnen worden opgegeven. Hieronder vindt u een voorbeeld van een HTML-pagina waarbij 'Pragma: No-Cache' en 'Expires: -1:
<HTML><HEAD><META HTTP-EQUIV="Pragma" CONTENT="no-cache"><META HTTP-EQUIV="Expires" CONTENT="-1"></HEAD><BODY></BODY></HTML>
Pragma: No-Cache voorkomt caching alleen bij een veilige verbinding. Een META-label 'Pragma: No-Cache' wordt precies hetzelfde behandeld als 'Expires: -1' als er een niet-veilige pagina wordt gebruikt. De pagina wordt in het cachegeheugen geplaatst maar daarbij onmiddellijk als verlopen gemarkeerd.
Cache-Control META HTTP-EQUIV-labels worden genegeerd en hebben geen effect in Internet Explorer versie 4 of 5. Om 'Cache-Control' te kunnen gebruiken moet deze header worden opgegeven met behulp van HTTP-headers (zie de sectie over 'Cache-Control' eerder in dit artikel).
Doorgaans worden er standaard HTTP-headers en geen META-labels gebruikt. META-labels moeten over het algemeen aan het begin van de sectie HTML HEAD worden geplaatst. Bovendien is er één probleem waarvan bekend is dat het zich kan voordoen bij het Pragma HTTP-EQUIV META-label.
Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie:
222064 'Pragma: No-cache' voorkomt mogelijk niet dat pagina in cache wordt opgeslagen
Serveropties voor caching
Wanneer de header 'Cache-Control' op niet-ASP-pagina's moet worden gebruikt, kan het nodig zijn met opties uit de serverconfiguratie deze header automatisch te laten toevoegen. Raadpleeg de documentatie bij de server voor het toevoegen van HTTP-headers aan reacties van servers voor een bepaalde directory. Voer voor een voorbeeld in IIS 4 de volgende stappen uit:
- Open Internet-servicebeheer.
- Open met behulp van de computer- en servicesstructuur de standaardwebserver (of een andere webserver) en zoek de directory op met de inhoud waaraan de header 'Cache-Control' moet worden toegevoegd.
- Open het dialoogvenster Eigenschappen voor die directory.
- Open het tabblad HTTP-headers.
- Klik op de knop Toevoegen in de groep Aangepaste HTTP-headers en voeg 'Cache-Control' toe voor de naam van de header en 'No-Cache' voor de waarde van de header.
Het wordt niet aangeraden deze header op de gehele webserver te gebruiken. Reserveer deze header alleen voor inhoud die absoluut niet in het cachegeheugen van de client mag worden opgeslagen.
Checklist van problemen
Als u de procedures uit dit artikel hebt toegepast en er doen zich nog steeds problemen voor met caching en Internet Explorer, probeert u aan de hand van deze checklist de problemen op te lossen alvorens u contact opneemt met de technische ondersteuning van Microsoft.
- Gebruikt u de header 'Cache-Control' met de ASP-eigenschap 'Response.CacheControl' of via een geretourneerde HTTP-header? Dit is de enige manier om caching in Internet Explorer te voorkomen.
- Gebruikt u Internet Explorer 4.01 Service Pack 2 of hoger? Er is geen manier om caching in oudere versies van de browser helemaal te voorkomen.
- Hebt u goed gecontroleerd of voor de webserver HTTP 1.1 is ingeschakeld en HTTP 1.1-verzoeken naar Internet Explorer worden geretourneerd? 'Cache-Control'-headers zijn ongeldig in HTTP 1.0-reacties.
- Als u CGI/ISAPI/Servlets op de server gebruikt, houdt u zich dan exact aan de HTTP 1.1-specificatie, vooral wat betreft de CRLF-beëindiging van HTTP-headers? In het belang van de prestaties accepteert Internet Explorer doorgaans geen enkele reactie die in strijd is met de HTTP 1.1-specificatie. Dit resulteert doorgaans in genegeerde headers of in rapporten over onverwachte serverfouten.
- Zijn de HTTP-headers correct gespeld?
Referenties
Voor meer informatie klikt u op de volgende artikelnummers in de Microsoft Knowledge Base:
189409 Het in cache opslaan van webpagina's bepalen met IIS 4.0
165150 Pragma: No-cache gebruiken met IIS en IE
Meer informatie over HTTP/1.1 vindt u op de volgende website, waar u RFC 2616 kunt verkrijgen: