Caching

Cache-Topologien

Unterschiedliche Cache-Topologien sind möglich

  • Ausschließlich clientseitiger Cache
  • Clientseitig shared Cache (Proxy)
  • Server-Cache
  • Beliebige Mischformen dieser drei Formen

Ausschließlich clientseitiger Cache

Clientseitiger Cache
Clientseitiger Cache

Clientseitiger shared Cache (Proxy)

Proxy
Clientseitiger Shared Cache

Server-Cache

Server
Serverseitiger Cache

Mischform

Mischform
Gemischter Cache Cache

Konsistenz des Caches

Wie kann man den Cache konsistent halten?

  • Server notifiziert die Caches über Änderungen
    (Notifikationsmodell)
  • Server sagt dem Cache, wie lange Daten gültig sind
    (Expirationsmodell)
  • Cache fragt beim Server nach, ob Daten noch gültig sind
    (Validierungsmodell)

Welche dieser Methoden ist für HTTP ungeeignet und warum?

Expirationsmodell

Server sendet die Gültigkeitsdauer der Daten im Response mit

HTTP/1.1 200 OK
Date: Mon, 03 Oct 2022 14:14:27 GMT
Server: Apache
Cache-Control: max-age=60
Content-Language: de-DE
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked

Alternativ kann er auch ein absolutes Datum angeben

Expires: Tue, 04 Oct 2022 14:14:27 GMT
  • Client (oder Proxy) fragt die Ressource erst nach Ablauf der Gültigkeitsdauer erneut an
  • Alle Anfragen vor Ablauf werden aus dem Cache beantwortet

Validierungsmodell

  • Client (oder Proxy) fragt beim Server an, ob seine Kopie der Ressource noch aktuell ist
  • Client kann bedingten Request stellen
    GET /orders/ HTTP/1.1
    Host: hs-mannheim.de
    If-Modified-Since: Mon, 03 Oct 2022 14:14:27 GMT
  • Client kann eine Prüfsumme (Entity-Tag, Etag) über die Ressource berechnen und entsprechende Anfrage stellen
    GET /orders/ HTTP/1.1
    Host: hs-mannheim.de
    If-None-Match: „b1b88d1e56778fe933fd4de66342f59b“
  • Wenn sich die Ressource nicht verändert hat, liefert der Server ein 304 Not Modified, andernfalls die Ressource

Prüfsummen mit ETag

Zwei Arten von ETags

  • Starke ETags (strong etags): Response muss Byte für Byte identisch sein, damit der Server dasselbe ETag verwenden darf
    • Erlauben range requests
  • Schwache ETags (weak etags): Repräsentieren Ressource auf logischer Ebene, Darstellung darf sich bei identischem ETag leicht unterscheiden
    • Verbieten range requests
    • Zu erkennen an einem vorangestellten W/
      Etag: W/"845250bc4bb5783e0d618fcc97204e81"

Cache-Control-Header: Request

Request-Header-Feld Cache-Control steuert Caching

Attribut Bedeutung
no-cache Antwort muss vom original Server kommen, nicht aus dem Cache
no-store Darf nicht persistent (z. B. auf Platte) abgelegt werden
max-age=… Zeit in Sekunden, die die Antwort alt sein darf. 0 entspricht no-cache
max-stale=… Client nimmt auch nicht aktuellen Antworten, solange sie nicht älter als die angegebenen Sekunden sind
min-fresh=… Wie lange muss die Antwort mindestens noch gültig sein
no-transform Cache darf die Daten nicht verändern (z. B. Bilder nicht konvertieren)
only-if-cached Client will die Daten nur, wenn sie aus einem Cache stammen

Cache-Control-Header: Response

Response-Header-Feld Cache-Control steuert Caching

Attribut Bedeutung
public Darf auch von einem shared Cache gecached werden
private Darf von einem shared Cache nicht gecached werden
no-cache Darf nicht gecached werden
no-store Darf nicht persistent (z. B. auf Platte) abgelegt werden
no-transform Cache darf Daten nicht verändern (z. B. Bilder nicht konvertieren)
must-revalidate Ressource noch einmal validiert werden bevor sie ausgeliefert wird
proxy-revalidate Wie must-revalidate aber nur für shared Caches
max-age=… Zeit in Sekunden, für die die Antwort gültig ist
s-maxage=… Wie max-age aber für shared Caches

Copyright © 2025 Thomas Smits