Expires
Wichtig: Jede an einer Website beteiligte Ressource - neben dem eigentlichen HTML-Dokument die eingebundenen Bilder, verwendeten Webschriften, Stylesheet- und Javascript-Dateien - wird eigens per GET vom Browser angefordert. Das heißt, dass bei jeder dieser Ressourcen auch eigene Caching-Direktiven...

Wichtig: Jede an einer Website beteiligte Ressource - neben dem eigentlichen HTML-Dokument die eingebundenen Bilder, verwendeten Webschriften, Stylesheet- und Javascript-Dateien - wird eigens per GET vom Browser angefordert. Das heißt, dass bei jeder dieser Ressourcen auch eigene Caching-Direktiven gesetzt werden können.Sehen wir uns einmal die das Caching betreffenden Angaben genauer an.
Expires
Über Expires können Sie bestimmen, wie lange ein Dokument als aktuell angesehen wird:
Expires: Thu, 30 Aug 2012
16:00:00 GMT
Das Datum wird in Form eines HTTP-Datums angegeben und basiert auf der Greenwich Mean Time (GMT). Ein Datum in der Vergangenheit oder eines, das dem aktuellen Zeitpunkt entspricht, bedeutet, dass das Dokument nicht gecacht werden soll.Damit das funktioniert, muss die Zeit des Servers korrekt eingestellt sein.
Cache-Control: mehr Optionen dank HTTP 1.1
Bei Cache-Control können Sie mehrere Angaben machen. Die wichtigste ist max-age und bestimmt wie lange eine Ressource gültig ist. Die Angaben werden in Sekunden erwartet.
Cache-Control: max-age=3600
Das bedeutet, dass die aktuelle Ressource eine Stunde lang als frisch angesehen werden soll. Weitere nützliche Zeitangaben sind die folgenden:
- 3600 - 1 Stunde
- 86400 - 1 Tag
- 604800 - 1 Woche
- 2419200 - 1 Monat
- 29030400 - 1 Jahr
- Über public können Sie auch Ressourcen, die eine Authentifizierung verlangen, cachetauglich machen.
- Das Gegenteil zu public ist private. Damit steuern Sie, dass Caches, die nur zu einzelnen Benutzern gehören, die Antwort cachen, Proxyserver und dergleichen hingegen nicht.
- Die Einstellung no-cache bewirkt, dass der Cache beim Server immer um Validierung bittet.
- no-store bedeutet, dass nie eine Kopie behalten werden soll.
- must-revalidate: Das Protokoll HTTP erlaubt es Caches unter bestimmten Umständen, eine abgelaufene Version zu behalten. Mit diesem Header teilen Sie dem Cache mit, dass er die angegebenen Regeln zwingend befolgen muss.
- proxy-revalidate funktioniert wie must-revalidate, richtet sich aber an Proxys.
Cache-Control-Header erlauben genauere Kontrollmöglichkeiten, aber Expires ist weiter verbreitet. Wenn Cache-Control max-age und Expires gleichzeitig gesetzt ist, setzt sich Cache-Control durch.
Validatoren
Wenn ein Dokument gemäß der Cacheangaben abgelaufen ist, kann es sein, dass das Dokument trotzdem aktuell ist, weil es keine neuere Version gibt. Ob das zutrifft, lässt sich mit Validatoren überprüfen. Im Wesentlichen gibt es hier zwei.
- Bei Last-Modified ist das Datum der letzten Änderung angegeben, wie es sich für den Server darstellt. Diese Angabe sendet der Server normalerweise von selbst. Bei dynamisch generierten Dateien sendet der Server allerding keinen Last-Modified-Header. Sie können einen in PHP über header('Last-Modified: GMT time'); nachbilden und ebenfalls das If-Not-Modified-Since nachbauen. Einen Link zu Erläuterungen, wie das funktioniert, finden Sie im Kasten links.
- Die andere Möglichkeit ist der mit HTTP 1.1. eingeführte ETag, der Dokumente eindeutig kennzeichnet. Da man nicht sicher sein kann, welche Version von HTTP der Cache versteht, wird ETag oft in Kombination mit Last-Modified benutzt.
Cache-Direktiven setzen
Zur Steuerung des Cache-Verhaltens gibt es eine meta-Angabe:
<meta http-equiv="expires"
content="0" />
Diese würde beispielsweise bewirken, dass das Dokument nicht zwischengespeichert wird.Zwei Gründe sprechen allerdings gegen diese Methode:
- Damit diese Informationen ausgewertet werden können, muss das Dokument selbst geparst werden - und das tut ein Proxyserver nicht.
- Sie können damit nur bestimmen, ob HTML-Dokumente gecacht werden, nicht aber das Cachen von anderen Dateien wie Bildern, Javascript- oder CSS-Dateien steuern. Und gerade bei diesen bringt die richtige Caching-Strategie einen echten Performancegewinn.
Apache-Webserver
Beim Apache-Webserver lässt sich das Caching beispielsweise über die Module mod_headers und mod-expires steuern. Über mod_headers können Sie Frage- und Antwort-HTTP-Headers setzen; das mod_expires-Modul dient zum Generieren von Expires und Cache-Control-Headern.