Caching mit Expires
Nachdem wir uns mit “Webseiten-Komprimierung” beschäftigt haben, folgt nun das Caching (Gültigkeit).
Mit dem Apache Modul Expires ist es möglich gewissen Ressourcen einen Cache-HTTP-Header, sozusagen ein “Verfallsdatum” (gültig bis) zu geben. Somit weist das Modul den Browser an die zuvor heruntergeladenen Ressourcen von der lokalen Festplatte zu laden, anstatt erneut über das Internet.
Expires geben also die “Lebensdauer” einer Ressource (i.d.R. Datei) über den Cache-HTTP-Header an. Lebensdauer bedeutet, ein Zeitraum, in dem der Browser die gecachte Ressource ohne zu überprüfen, ob eine neue Version auf dem Web-Server verfügbar ist, anzeigt bzw. von der lokalen Festplatte lädt. Diese Expires sind “starke” Cache-Header und gelten unbedingt, das heißt, sobald sie gesetzt sind und die Ressource einmal heruntergeladen wurde, stellt der Browser keine GET-Anfragen für die Ressource bis das Verfallsdatum erreicht ist. Das kann Ladezeit und Traffic sparen.
Hier mal ein Beispiel für den Code, der so dann z. B. in die .htaccess geschrieben werden kann:
<IfModule mod_expires.c> # BEGIN Expire headers # Modul aktivieren ExpiresActive on # Fav/Icons sind 1 Monat gültig ExpiresByType image/ico A2419200 ExpiresByType image/x-icon A2419200 # übliche Dateien sind 2 Wochen gültig ExpiresByType application/pdf A1209600 ExpiresByType application/zip A1209600 ExpiresByType application/javascript A1209600 ExpiresByType application/x-javascript A1209600 ExpiresByType application/x-shockwave-flash A1209600 # CSS sind 3 Tage gültig ExpiresByType text/css A2592000 # übliche Grafiken sind 3 Tage gültig ExpiresByType image/jpg A2592000 ExpiresByType image/gif A2592000 ExpiresByType image/jpeg A2592000 ExpiresByType image/png A2592000 # alle anderen Dateien sind 4 Stunden gültig ExpiresDefault A14400 </IfModule>
Über ExpiresByType bestimmt man den Dateityp. Die Lebensdauer wird in Sekunden angegeben, da gibt es 2 Schreibweisen:
- z. B. “access plus 2592000 seconds”
- z. B. A2592000 (wie oben gezeigt)
Wer nicht selber rechnen mag
, eine Übersicht der Zeitangaben wird im Time Cheatsheet gezeigt. (z.B. 2592000 = 3 Tage * 24 Stunden * 60 Minuten * 60 Sekunden)
Neben den “Expires” gibt es noch “Header set Cache-Control max-age”. Hier wird auf ähnliche Weise, aber über das Apache-Modul Headers, das maximale Alter einer Datei bestimmt. Grundsätzlich gilt: Entweder Expires oder Cache-Control, nicht beides.
Im Zusammenhang damit sei noch kurz Last-Modified und ETag genannt. Beide geben charakteristische Spezifikationen über eine Ressource aus, sodass der Browser feststellen kann, ob Ressourcen gleich sind. Beim Last-Modified-Header ist dies immer ein Datum. Beim ETag wird die Ressource eindeutig über einen Wert (Datei-Versionen oder Content-Hashes sind typisch) identifiziert.
Last-Modified ist ein “schwacher” Cache-Header, er erlaubt dem Browser heuristisch zu bestimmen, ob das Element aus dem Cache zu holen ist oder nicht. Allerdings hat es den Vorteil, dass der Browser bei einem explizitem Neuladen der Seite, auch die Ressource neu ausgibt. Auch hier ist es wieder überflüssig, sowohl ETag und Last-Modified-Header anzugeben, entweder oder.
Wer also Last-Modified verwendet sollte ETag wie folgt über die .htaccess deaktivieren:
# Turn ETags Off FileETag None
