Intelligente Lösungen
in neuer Dimension

Cache-Konfiguration für Octopress

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
uli@ulinuc:~/git/dpserver/servers$ curl -kv http://daemons-point.com
* Rebuilt URL to: http://daemons-point.com/
* Hostname was NOT found in DNS cache
*   Trying 138.201.16.240...
* Connected to daemons-point.com (138.201.16.240) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: daemons-point.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Thu, 10 Jan 2019 04:34:33 GMT
* Server Apache/2.4.18 (Ubuntu) is not blacklisted
< Server: Apache/2.4.18 (Ubuntu)
< Last-Modified: Tue, 08 Jan 2019 17:36:27 GMT
< ETag: "fd2-57ef5c8fce836"
< Accept-Ranges: bytes
< Content-Length: 4050
< Vary: Accept-Encoding
< Content-Type: text/html
< 
</body>
</html>

<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
...
</body>
</html>
* Connection #0 to host daemons-point.com left intact

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:

  1. “mod_headers” aktivieren: a2enmod headers
  2. Header “Cache-Control” aktivieren via konfig-Datei: Header setifempty Cache-Control "max-age=3600, public
  3. Prozess durchstarten: service apache2 restart

Test

Vorher

1
2
$ curl -kv https://daemons-point.com/ 2>&1|grep -i cache
* Hostname was NOT found in DNS cache

Nachher

1
2
3
$ curl -kv https://daemons-point.com/ 2>&1|grep -i cache
* Hostname was NOT found in DNS cache
< Cache-Control: max-age=3600, public

Quellen