Caching mit Expires

Hinweis: Dieser Artikel ist älter als zwei Jahre (letzte Änderung: 8. Mai 2020) und evtl. nicht mehr aktuell.

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 A259200
# übliche Grafiken sind 3 Tage gültig
  ExpiresByType image/jpg A259200
  ExpiresByType image/gif A259200
  ExpiresByType image/jpeg A259200
  ExpiresByType image/png A259200
# 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 259200 seconds"
  • z. B. A259200 (wie oben gezeigt)

Wer nicht selber rechnen mag ;-) , eine Übersicht der Zeitangaben wird im Time Cheatsheet gezeigt. (z.B. 259200 = 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

Alles zusammen könnte dann so in der .htaccess aussehen:
htaccess

Empfehle uns: email facebook google plus twitter

Artikel Informationen

  • Erstellt am Dienstag, 10. August 2010 um 18:32 (Letzte Änderungen 8. Mai 2020, 21:43) und abgelegt unter WordPress mit den Tags: , ,
  • Kommentare zu diesen Eintrag im Kommentar Feed Feed.
  • Du kannst einen Kommentar hinterlassen. Pingback ist im Augenblick nicht erlaubt.
Abonnieren
Benachrichtige mich zu:
4 Kommentare
Inline Feedbacks
View all comments

Hallo,

nachdem ich die .htaccess dem Beispiel entsprechend eingebaut habe, gibt es auf meinen Blog Probleme mit den Kommentaren. Gibt es eine Möglichkeit den Cache zu entleeren, wenn neue Kommentare geschrieben werden, da diese sonst erst nach langer Zeit für die wiederkehrenden Besucher einsehbar sind, was die flüssige Diskussion unterdrückt ? Oder welchen Wert in der .htaccess Datei kann ich auslassen, damit Kommentare nicht gecachet werden ?

Du könntest versuchen die Zeilen ab 21 auf A0 zu ändern. Ich vermute aber dass das nicht das Problem ist. Nutzt Du ein zusätzliches Cache-Plugin wie Cachify oder W3 Total Cache o. ä.?

Ist da nicht überall eine '0' zu viel bei den Angaben?

ups, du meinst bei den 3 Tagen, oder?
Klar hast Recht, ist bei uns ursprünglich 30 Tage und wir haben es für diesen Artikel nicht zurück gerechnet. Wird sofort korrigiert.
Danke!

4
0
Would love your thoughts, please comment.x