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).