Zum Inhalt springen
Der Guide für ein smartes Leben.
VG Wort Pixel
Caching-Strategie

Expires

Autor: Dr. Florence Maurice • 2.12.2011 • ca. 2:50 Min

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...

Im Firebug sehen Sie im Netzwerk- Bereich einen eigenen Tab Cache mit Informationen zu den aus dem Cache geholten Dateien.
Im Firebug sehen Sie im Netzwerk-Bereich einen eigenen Tab Cache mit Informationen zu den aus dem Cache geholten Dateien.
© Internet Magazin

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
Neben max-age gibt es auch s-maxage. Es funktioniert wie max-age, bezieht sich aber nur auf Proxy-Caches. Weitere mögliche Angaben:
  • Ü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.

  1. 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.
  2. 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.
Besser ist es, die Caching-Daten mit dem Header bei der Kommunikation per HTTP zu senden. Damit können Sie die Cache-Direktiven mit allen Mitteln senden, die Ihnen prinzipiell zum Senden von HTTP-Headern zur Verfügung stehen.

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.