Eine übliche System-Architektur auf einem ZMS-Hosting-Server ermöglicht das Multisite-Management, d.h. viele Domains werden seitens ZMS über eine Multi-Client oder Master-Client-Architektur bedient. Als praktisch hat sich erwiesen, Rewriting und Caching zu trennen, indem Zope (z.B. Port 8080) die Dokumente zunächst an den Apache-Webserver (Port 81) ausliefert, der wiederum den Datenstrom an Squid (Port 80) weiterreicht.
headCache.dtml
Die DTML-Methode headCache schreibt Caching-Anweisung in den HTTP-Header. um es zuerst auszuführen, ruft man headCache über das alleroberste DTML-Template auf: headDoctype
<dtml-if "REQUEST.get('preview','')=='preview' or (getObjProperty('attr_cacheable', REQUEST)==0)"> <dtml-call "RESPONSE.setHeader('Expires', '-1')"> <dtml-call "RESPONSE.setHeader('Cache-Control', 'no-cache')"> <dtml-call "RESPONSE.setHeader('Pragma', 'no-cache')"> <dtml-else> <dtml-call "RESPONSE.setHeader('Expires',_.DateTime(_.DateTime().timeTime() + 900000).toZone('GMT').rfc822())"> <dtml-call "RESPONSE.setHeader('Last-Modified',bobobase_modification_time().toZone('GMT').rfc822())"> <dtml-call "RESPONSE.setHeader('If-Modified-Since',bobobase_modification_time().toZone('GMT').rfc822())"> <dtml-call "RESPONSE.setHeader('Cache-Control','proxy-revalidate')"> </dtml-if>
Die Caching-Anweisungen basieren auf dem ZMS-Meta-Attribut cacheable (bzw. 'attr_cacheable'); sofern gecacht wird, werden Standardwerte für die Cache-Parameter gesetzt. Grundsätzlich ist berücksichtigen, dass sich die Caching-Angaben sowohl auf den Proxy-Server wie auch auf den lokalen Browser-Cache beziehen können:
- max-age = das maximale Alter in Sekunden (ähnlich wie Expires, aber nicht auf absolutes Datum bezogen).
- s-maxage = wie max-age, bezieht sich aber nur auf Proxy-Caches (nicht auf Browser-Cache).
- public = erlaubt auch das Cachen von Seiten, für die eine Authentifizierung zu Durchlaufen ist.
- no-cache = keine Caching durch Proxies und Browser. Für jede Anfrage ist seitens des Cache zu prüfen, ob eine neuere Version des Objekts vorliegt.
- must-revalidate = instruiert alle Arten von Caches, Anweisungen hinsichtlich Caching strikt zu befolgen.
- proxy-revalidate = wie must-revalidate, bezieht sich aber nur auf Proxy-Caches (nicht auf Browser-Cache).