HTTP-Caching und Reverse Proxies
Diese Seite richtet sich an Entwickler, die Cache-Control in einem Controller setzen, Varnish vorschalten oder den
HTTP-Cache eines Frameworks verwenden. In Exponential sind Seiten-Header Einstellungen, und es gibt zwei eingebaute
Seiten-Caches, die vor dem Kernel liegen. Auf HTTP-Ebene wird nichts gecacht, bis Sie es einschalten.
Inhalt
- Was standardmäßig gesendet wird
- Header für anonyme Besucher
- Der rollenbewusste HTTP-Cache
- Der Velocity-Response-Cache
- Hinter einem Proxy oder CDN
- Niemals cachen
- Im Vergleich mit anderen Frameworks
Was standardmäßig gesendet wird
Seiten: Cache-Control: no-cache, must-revalidate, ein abgelaufenes Expires und Pragma: no-cache. So behält kein
Browser, Proxy oder CDN eine Seite, bis Sie es anders entscheiden
(HTTP-Caching für anonyme Besucher).
Header für anonyme Besucher
# settings/override/site.ini.append.php
[HTTPHeaderSettings]
CustomHeader=enabled
OnlyForAnonymous=enabled
OnlyForContent=enabled
HeaderList[]
HeaderList[]=Cache-Control
HeaderList[]=Expires
Cache-Control[]
Cache-Control[/]=public, max-age=60
Expires[]
Expires[/]=60OnlyForAnonymous macht das sicher: Ein angemeldeter Benutzer erhält immer die No-Cache-Header. Die Schlüssel sind
Pfade, sodass verschiedene Teile des Baums unterschiedliche Lebensdauern erhalten können. Der Preis ist Veraltung: Ein
anonymer Besucher sieht nach einer Bearbeitung möglicherweise eine Seite, die bis zu max-age Sekunden alt ist.
Der rollenbewusste HTTP-Cache
Der HTTP-Cache des Kernels (settings/httpcache.ini, ausgeliefert mit [HttpCacheSettings] Enabled=disabled)
speichert gerenderte Inhalts-Views mit einem Schlüssel aus Schema, Host, Siteaccess, Pfad und dem
Berechtigungskontext des Besuchers: eine Kopie für anonyme Besucher, eine pro Kombination aus Rollen und
Rolleneinschränkungen und eine private Kopie nur dort, wo eine Richtlinie content/read vom Benutzer abhängt. Der
nächste Request wird beantwortet, bevor der Kernel startet: durch einen frühen Ausstieg, der unter Apache, PHP-FPM oder
FrankenPHP aus config.php eingebunden wird, und unter Velocity durch den Serverprozess selbst. Der Header
X-Exp-Cache meldet HIT, STALE, MISS oder BYPASS mit einer Begründung. Das eigene Formular-Token des Besuchers
wird bei jedem Treffer wieder in die gespeicherte Seite eingesetzt (Der rollenbewusste HTTP-Cache).
Das ist ungewöhnlich: Die meisten HTTP-Caches von Frameworks bedienen nur anonymen Verkehr. Hier teilen sich angemeldete Mitglieder gecachte Seiten auf sichere Weise, weil der Schlüssel ihr Berechtigungskontext ist.
Der Velocity-Response-Cache
Velocity kann wiederholte Requests für öffentliche Seiten innerhalb des Serverprozesses beantworten, noch bevor ein
Worker gewählt wird: bedingte Requests (304), ETag, Age, Stale-While-Revalidate und Invalidierung, wie ein kleiner
in den Server eingebauter Reverse Proxy. Er ist ausgeschaltet, bis eine Einstellung ihn aktiviert
(Velocity-Response-Cache). Leeren Sie ihn bei einem Deployment als
Letztes: ./console exp:velocity cache clear --apply.
Hinter einem Proxy oder CDN
- Tragen Sie die Adressen des Proxys in
site.ini [HTTPHeaderSettings] TrustedProxies[]ein, damit weitergereichtes Schema und weitergereichter Host nur von ihnen geglaubt werden (Vertrauenswürdige Proxies, Hinter einem Reverse Proxy). - Lassen Sie das CDN nur cachen, was die Site als cachebar kennzeichnet; angemeldete Sessions tragen ein Cookie, das das CDN durchreichen muss.
- Für einen vorgeschalteten Proxy mit Purging kann
httpcache.ini [HttpCacheSettings] TagHeaderdie Purge-Tags jeder Seite (ihre Knoten, Objekte und Layouts) in einem Header wiexkey(Varnish-xkey-VMOD),Surrogate-Key(Fastly) oderCache-Tag(Cloudflare) senden; standardmäßig ist die Einstellungdisabled, weil die Tags interne IDs nennen. Den Purge-Request beim Veröffentlichen an den Proxy zu senden, ergänzen Sie selbst, zum Beispiel in einemcontent/cache-Listener (Ereignisse und Listener).
Niemals cachen
Aus HTTP-Caching und CDNs: Seiten für angemeldete Benutzer in einem gemeinsamen Cache, Warenkörbe, Checkout, Kontoseiten, Formulare mit einem Formular-Token (das Token gilt pro Session) und die Administrationsoberfläche.
Im Vergleich mit anderen Frameworks
| Framework | Konzept | Exponential |
|---|---|---|
| Symfony | Reverse Proxy HttpCache, #[Cache], ESI | über Einstellungen gesteuerte Header, der rollenbewusste HTTP-Cache, der Velocity-Response-Cache; kein ESI |
| Laravel | Pakete für Response-Caching, Middleware für Cache-Control | dieselben Einstellungen und Caches |
| Django | cache_page, UpdateCacheMiddleware | dasselbe |
| Rails | expires_in, fresh_when | Header pro Pfad in den Einstellungen |
Verwandte Seiten
- Caching: die Ebenen
- HTTP/2 und Cache-Aufwärmen
- Statischer Cache und Velocity
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.