PHP-Tipps: Caching mit E-Tags

Wer häufig dynamische Seiten mit PHP erstellt, kennt das Problem: Meistens muss man das Zeit-Caching des Browsers mit meta-Tags oder speziellen header-Kommandos abschalten, damit stets der aktuelle Inhalt ausgeliefert wird.
Wenn man jedoch genau feststellen kann, wann sich eine Seite ändert, so gibt es doch eine ganz einfache Methode, dennoch Seitencaching zu ermöglichen – Stichwort E-Tags.

Dabei wird für jede Seite ein eindeutiger ETag vergeben, der sich ändert, sobald die Seite nicht mehr dieselbe ist. Der ETag selbst kann theoretisch eine beliebige Zeichenkette sein. Idealerweise besteht dieser ETag nun z.B. aus einer Prüfsumme des Seiteninhalts – so führt auch die kleinste Änderung zu einer ETag-Änderung – der Browser läd die Seite erneut.

Einsetzen lässt sich dies mit PHP relativ einfach.
Zunächst wird ein ETag für die Seite gesetzt, nehmen wir an, dieser ist in der Variable $etag gespeichert.

// $etag enthält den ETag für diese Seite, z.B. erzeugt durch sha1($seitenInhalt)
header('ETag: "' . $etag . '"');

Beim nächsten Laden der Seite schickt nun der Browser einen speziellen HTTP-Header mit: IF_NONE_MATCH. Dieser wird nun mit dem ETag verglichen – und bei übereinstimmung kein Inhalt ausgeliefert:

// $etag enthält den ETag für diese Seite, z.B. erzeugt durch sha1($seitenInhalt)
if (!empty ($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag) {
    // HTTP-Statuscode 304 senden, keine Ausgabe
    header ("HTTP", true, 304);
    exit;
}
 
// Seite nicht gecacht, sende ETag sowie Ausgabe
header('ETag: ' . $etag);

Und das wars auch schon. Mehr zum Thema ETags und HTTP-Statuscodes gibts bei Wikipedia.

Kommentare & Trackbacks (0)

keine Kommentare

Jetzt kommentieren

Erlaubte HTML-Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">





 

Kategorien

 

Der Kau: Der Link führt übrigens zu einem “Test”. Allerdings erwähnt schon die Einleitung die...

Der Kau: Der Datenschutz ist nach der Rechtsprechung des Bundesverfassungsgerichts ein Grundrecht (Recht auf...

Benny: Und wieder seh ich eigentlich kein Problem dahinter? Solange hier nur firmenintern die Mails überwacht werden...

Der Kau: Mit der Demokratie gehts schon seit Jahren bergab… Die großen / mächtigen Staaten sind inzwischen so...

Steffen: Das stimmt, aber die Grundproblematik bleibt ja dennoch bestehen. Wenn der Staat immer mehr Schulden...

 

Blogroll