Browser Caching verhindern

Diesesmal geht es nicht um performance optimierung mit Caching, sondern wie man dieses explizit verhindert. Gerade mit AJAX oder Silverlight Webservice aufrufen bekommt man alte Ergebnisse präsentiert weil der Browser die Seite schlichtweg nicht noch einmal am Server anfordert.

Gesteuert wird dies per HTTP Header. Fiddler lässt sich das ganz gut darstellen.

image

In diesem Fall hat der Browser die Page noch einmal angefragt und vom Server eine 304 ( not modified) Meldung bekommen.

Im nächsten Beispiel erzwingt Heise Online das jedesmal der Werbecounter aufgerufen wird und auf keinen Fall der Browser das Ergebnis cachen darf.

image 

Diese Header Information kann man im Code setzen

ASP

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

ASP.NET

Response.Cache.SetCacheability(HttpCacheability.NoCache)

HTML

Aus Kompatibilitätsgründen gibt es auch die Möglichkeit per Metatags den Browser anzuweisen wie Caching zu handhaben ist. Ich würde das aber nicht ungeprüft verwenden

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

IIS Webserver

Auch der Webserver hat die Möglichkeit Header Information bei jedem Response anzuhängen und so caching zu unterbinden.

Dies funktioniert in der MMC des IIS 6 auf Verzeichnisebene. Folgender Dialog zeigt  wie man über hinzufügen den Header ergänzt.

 image

 

 

Kommentar schreiben