Caching

Problem: Client fragt immer wieder dieselben Daten ab - unnötige Last und Latenz. Lösung: Server signalisiert, ob und wie lange eine Antwort gecacht werden darf.

Vorteile:

  • Weniger Netzwerk-Traffic
  • Schnellere Antworten
  • Geringere Server-Last

Hinweis

Caching ist eines der sechs REST-Prinzipien — der Server muss kennzeichnen, ob eine Antwort cachebar ist.

Cache-Control

Der Server steuert das Caching über den Cache-Control-Header:

HTTP/1.1 200 OK
Cache-Control: max-age=3600, public
Optionen Bedeutung
max-age=3600 3600 Sekunden (1h) gültig
public Jeder darf cachen (auch Proxies)
private Nur der Client darf cachen
no-store Nie cachen (z.B. sensible Daten)
no-cache Cachen erlaubt, aber vor Nutzung validieren

Warnung

no-cache ≠ “nicht cachen”! Es bedeutet: immer erst beim Server nachfragen, ob sich etwas geändert hat.

ETag & Bedingte Requests (no-cache)

Problem: max-age abgelaufen — hat sich die Ressource wirklich geändert?

Lösung: Server vergibt einen Fingerabdruck (ETag). Client fragt: “Hat sich etwas geändert?”

  1. Erster Request:
GET /api/v1/messages/1 →  200 OK
                          ETag: "a1b2c3"
  1. Späterer Request:
   GET /api/v1/messages/1
   If-None-Match: "a1b2c3"  →  304 Not Modified
                                (kein Body, Cache nutzen)
  1. Nach Änderung:
   GET /api/v1/messages/1
   If-None-Match: "a1b2c3"  →  200 OK
                                ETag: "d4e5f6"
                                (neuer Body, Cache aktualisieren)

Demo - Caching am MessageBoard

  1. Request mit verbose — ETag im Response suchen
curl -v https://rest.acosci.de/api/v1/public/messages/1
  1. Bedingter Request mit If-None-Match
curl -v -H "If-None-Match: \"EUER_ETAG\"" \
 https://rest.acosci.de/api/v1/public/messages/1

Tipp

Im Browser passiert das automatisch — bei jedem Seitenaufruf prüft der Browser ETags und spart so Bandbreite.

Zusammenfassung Caching

  • Cache-Control bestimmt ob und wie lange gecacht wird
  • ETag + If-None-Match ermöglichen Validierung ohne erneuten Download
  • 304 Not Modified = “Deine Version ist noch aktuell”
  • Spart Bandbreite, reduziert Last, verbessert Performance