Einleitung
Bei der Änderung für das feste Navigationsmenü ist mir aufgefallen, dass diese Änderung teilweise nicht wirksam wird. Hypothese: Das liegt am Browser-Cache. Abhilfe: Wir setzen die Cache-Headers.
Detailanalyse
Mittels curl
führe ich einige Abfragen unserer Octopress-Seiten durch.
Die für das Caching relevanten HTTP-Header liste ich nachfolgend auf.
Beispielabfrage
Abfrage mit Curl:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
Cache-Header
- /
- Last-Modified: Tue, 08 Jan 2019 17:36:27 GMT
- ETag: “fd2-57ef5c8fce836”
- Content-Type: text/html
- /stylesheets/screen.css
- Last-Modified: Tue, 08 Jan 2019 17:36:27 GMT
- ETag: “960a-57ef5c8fd45f6”
- Content-Type: text/css
- /atom.xml
- Last-Modified: Tue, 08 Jan 2019 17:36:27 GMT
- ETag: “1a43f-57ef5c8fcd896”
- Content-Type: application/xml
Fazit: Es sind keine “speziellen” Cache-Header gesetzt, es gibt kein “Cache-Control” und auch kein “Expires”. Damit “ziehen” die Defaults der verschiedenen Browser.
Soll-Zustand
Wir wollen erreichen, dass der Cache für maximal eine Stunde verwendet wird. Das sollte via “Cache-Control: maxage=3600” erreichbar sein.
Mit “public” erlauben wir das Caching für eventuell vorhandene Proxy-Server.
Aktionen
Alle Aktionen betiezen sich auf den vorgeschalteten Apache HTTPD:
- “mod_headers” aktivieren:
a2enmod headers
- Header “Cache-Control” aktivieren via konfig-Datei:
Header setifempty Cache-Control "max-age=3600, public
- Prozess durchstarten:
service apache2 restart
Test
Vorher
1 2 |
|
Nachher
1 2 3 |
|
Quellen
- Google – HTTP-Caching
- StackOverflow – How does static site generator like Jekyll handle browser caching … beschreibt hauptsächlich die “Expires”-Header, obsolet?