TATECHATLAS
◎ Deutsch
Web und APIs

Verständnis von Cache-Control-Headern für öffentliche und personalisierte Antworten

Dieser Artikel erklärt die HTTP-Cache-Control-Header 'no-store', 'no-cache' und 'private', wobei die Unterschiede bei der Steuerung des Caching-Verhaltens für öffentliche und personalisierte Antworten erläutert werden. Außerdem werden Browser-Diagnostik und häufige Fallstricke behandelt.

Auf dieser Seite

Cache-Control-Header sind entscheidend für die Verwaltung, wie Webbrowser und Zwischen-Caches (wie CDNs) Webressourcen verarbeiten. Diese Header geben den Caches Anweisungen, ob Antworten gespeichert, validiert oder das Speichern verhindert werden soll. Betrachten wir die drei wichtigsten Direktiven: 'no-store', 'no-cache' und 'private'. 'no-store' ist die strengste. Es verbietet jegliches Caching, einschließlich privater Caches. Dies ist unerlässlich für hochsensible Daten oder einmalige Antworten. Beispiel: Cache-Control: no-store. 'no-cache' erlaubt Caching, verlangt aber, dass der Cache vor der Wiederverwendung die Antwort immer mit dem Ursprungs-Server validiert. Dies stellt sicher, dass der Browser immer die neueste Version erhält, auch wenn der Cache eine veraltete Kopie hat. Beispiel: Cache-Control: no-cache. 'private' schränkt das Caching auf nur private Caches ein - solche, die mit einem bestimmten Benutzer verbunden sind, wie z. B. der lokale Cache des Browsers. Dies verhindert, dass gemeinsam genutzte Caches personalisierte Inhalte an andere Benutzer ausliefern. Beispiel: Cache-Control: private. Bei personalisierten Antworten ist 'private' unerlässlich. Betrachten Sie einen Benutzer, der sich auf einer Website anmeldet; seine Antwort sollte nur in seinem Browser gespeichert werden, nicht in einem gemeinsam genutzten CDN. Wenn eine Antwort personalisierte Daten enthält, ist die Verwendung von 'private' unerlässlich, um Informationslecks zu verhindern. Die MDN-Dokumentation hebt hervor, dass ‘no-cache’ nicht bedeutet “nicht cachen”. Es bedeutet “immer validieren, bevor Sie wiederverwenden”. Die ‘no-cache’ Direktive garantiert nicht, dass eine Validierung für History-Navigationen durchgeführt wird. Darüber hinaus gibt die ‘max-age’ Direktive an, wie lange eine Antwort als frisch betrachtet wird. Ein Wert von 0 bedeutet, dass die Antwort immer neu validiert werden muss. Die ‘immutable’ Direktive verhindert Caching, auch wenn max-age gesetzt ist, um sicherzustellen, dass der Browser immer die neueste Version der Ressource anfordert. Beim Überprüfen der Cache-Control-Header einer Browser-Anfrage sehen Sie, wie diese das Caching-Verhalten beeinflussen. Beispielsweise kann eine Anfrage für ein öffentliches Asset Cache-Control: public max-age=3600 haben, was bedeutet, dass es für eine Stunde gecacht werden kann. Eine Anfrage für ein privates Profil kann Cache-Control: private no-cache haben, um sicherzustellen, dass nur der Cache des Benutzers es speichern kann und vor der Wiederverwendung validiert werden muss. Browser-Diagnostik kann zeigen, ob eine Antwort gecacht wird und wie. Tools wie die Entwicklertools des Browsers ermöglichen es Ihnen, Netzwerk-Anfragen zu überwachen und die Cache-Control-Header zu untersuchen. Häufige Fehler sind das Vergessen, 'private' für personalisierte Antworten zu setzen, was zu potenziellen Informationslecks führen kann. Ein weiterer Fehler ist das Vertrauen allein auf 'no-store', wenn ein differenzierterer Ansatz erforderlich ist - manchmal ist das Erlauben von Caching mit Validierung vorzuziehen. Die Entscheidungskriterien sollten auf der Sensibilität der Daten und dem gewünschten Caching-Verhalten basieren. Schließlich ist zu beachten, dass Cache-Control keine Autorisierungsgrenze ist; ‘no-cache’ bedeutet nicht ‘kein Speichern’. Der Gültigkeitsbereich wird durch die spezifischen verwendeten Header und die von Browsern und Zwischen-Caches implementierten Caching-Richtlinien bestimmt.

Getrenntes Speichern von Wiederverwenden

Caching ist eine grundlegende Technik zur Verbesserung der Web-Performance, aber es ist entscheidend, zu verstehen, wie es mit der Datensensibilität interagiert. Das Kernkonzept besteht darin, zwischen dem Speichern einer Antwort und dem Wiederverwenden einer gespeicherten Antwort zu unterscheiden. Ein Cache kann eine Antwort speichern, muss sie aber vor der Wiederverwendung validieren. 'no-store' verhindert sowohl das Speichern als auch das Wiederverwenden, wodurch sichergestellt wird, dass die Antwort nie den Browser des Clients verlässt. 'no-cache' erlaubt das Speichern, verlangt aber, dass die Validierung vor der Wiederverwendung erfolgt, wodurch sichergestellt wird, dass der Browser immer die neueste Version erhält. 'private' schränkt das Speichern auf private Caches ein, wodurch gemeinsam genutzte Caches verhindern, dass sie personalisierte Inhalte an andere Benutzer ausliefern.

Betrachten Sie ein Szenario, in dem sich ein Benutzer anmeldet. Die Antwort, die ihre personalisierten Profildaten enthält, sollte als privat behandelt werden. Ohne 'private' könnte ein gemeinsam genutzter Cache diese Daten an andere Benutzer ausliefern, was ihre Privatsphäre gefährdet. Die MDN-Dokumentation betont, dass ‘no-cache’ nicht bedeutet “nicht cachen”. Es bedeutet “immer validieren, bevor Sie wiederverwenden.”

Verständnis von no-store

Der Cache-Control: no-store-Header ist der restriktivste. Er weist alle Caches - sowohl private als auch gemeinsam genutzte - an, die Antwort überhaupt nicht zu speichern. Dies ist die richtige Wahl für hochsensible Daten, einmalige Antworten oder Inhalte, die niemals wiederverwendet werden sollen. Dies deaktiviert die Caching für die angegebene Ressource effektiv.

Beispiel: Cache-Control: no-store würde verhindern, dass jeder Cache die Antwort speichert, unabhängig davon, ob es sich um einen Browser-Cache oder einen CDN-Cache handelt. Dies ist entscheidend, um den unbefugten Zugriff auf sensible Informationen zu verhindern.

Verständnis von no-cache

Der Cache-Control: no-cache-Header erlaubt Caching, verlangt aber immer, dass der Cache die Antwort vor der Wiederverwendung mit dem Ursprungs-Server validiert. Dies stellt sicher, dass der Browser immer die neueste Version der Ressource erhält, auch wenn der Cache eine veraltete Kopie hat. Es ist ein Kompromiss zwischen Leistung und Datenfrische.

Diese Direktive bedeutet nicht “nicht cachen”; sie bedeutet “immer validieren, bevor Sie wiederverwenden”. Der Browser wird immer eine Anfrage an den Server stellen, um zu überprüfen, ob die gespeicherte Kopie noch gültig ist. Dies ist besonders nützlich für Ressourcen, die sich häufig ändern, wie z. B. dynamische Inhalte.

Verständnis von private

Der Cache-Control: private-Header schränkt das Caching auf nur private Caches ein - solche, die mit einem bestimmten Benutzer verbunden sind, wie z. B. der lokale Cache des Browsers. Dies verhindert, dass gemeinsam genutzte Caches personalisierte Inhalte an andere Benutzer ausliefern. Es ist unerlässlich, um die Privatsphäre der Benutzer zu schützen.

Wenn eine Antwort personalisierte Daten enthält, ist die Verwendung von 'private' unerlässlich. Ohne diese kann ein gemeinsam genutzter Cache dieselbe Antwort an mehrere Benutzer ausliefern, was möglicherweise ihre persönlichen Informationen preisgibt. Die MDN-Dokumentation weist darauf hin, dass ‘private’ besonders wichtig ist für Antworten, die nach der Anmeldung empfangen werden.

Vergleich von drei Antwortrichtlinien

Hier ist eine Tabelle, die die wichtigsten Unterschiede zwischen den drei Direktiven zusammenfasst:

| Direktive | Speichern | Validierung | Gültigkeitsbereich |

| --------- | ------- | ---------- | ----------- |

| no-store | Nein | N/A | Alle Caches |

| no-cache | Ja | Immer | Alle Caches |

| private | Ja | Immer | Private Caches |

Überprüfen einer Browser-Anfrage

Verwenden Sie die Entwicklertools Ihres Browsers (die Sie normalerweise durch Drücken von F12 aufrufen), um die Cache-Control-Header von Netzwerk-Anfragen zu überprüfen. Suchen Sie im Netzwerk-Panel auf der Registerkarte 'Header' nach den Anfrageadressen. Dies zeigt Ihnen die Header an, die vom Browser gesendet werden, einschließlich der Cache-Control-Direktiven.

Beispielsweise kann eine Anfrage für ein öffentliches Asset Cache-Control: public max-age=3600 haben, was bedeutet, dass es für eine Stunde gecacht werden kann. Eine Anfrage für ein privates Profil kann Cache-Control: private no-cache haben, um sicherzustellen, dass nur der Cache des Benutzers es speichern kann und vor der Wiederverwendung validiert werden muss.

Umgang mit personalisierten Antworten

Personalisierte Antworten - solche, die benutzerbezogene Daten wie Anmeldeinformationen, Präferenzen oder den Warenkorb enthalten - erfordern eine sorgfältige Berücksichtigung der Cache-Control-Header. Verwenden Sie immer Cache-Control: private, um zu verhindern, dass gemeinsam genutzte Caches diese Daten an andere Benutzer ausliefern.

Wenn dies nicht der Fall ist, kann dies zu schwerwiegenden Datenschutzverletzungen und Sicherheitslücken führen. Die MDN-Dokumentation empfiehlt ausdrücklich die Verwendung von 'private' für benutzerbezogene Inhalte.

Erkennen von Eviction und Legacy-Einschränkungen

Es ist wichtig, zu erkennen, dass selbst mit 'no-cache' der Verlaufscache (bfcache) des Browsers immer noch eine gecachte Antwort ausliefern kann, ohne sie zu validieren. Dies ist ein Legacy-Verhalten, das für die Wiederherstellung früherer Sitzungen konzipiert wurde, und wird nicht durch den Cache-Control-Header gesteuert.

Darüber hinaus kann ein HTTP/1.0-Cache 'no-cache' nicht vollständig unterstützen, was dazu führen kann, dass veraltete Antworten wiederverwendet werden. Die Verwendung von 'max-age=0, must-revalidate' als Workaround kann dieses Problem beheben, aber es ist eine bewährte Vorgehensweise, 'no-cache' wann immer möglich zu verwenden.

Was Sie prüfen sollten

  • Cache-Verhalten hängt von Anforderung/Antwort und Zwischenläufen ab.
  • Cache-Control ist keine Autorisierungsgrenze; no-cache bedeutet nicht kein Speichern.
  • Die Direktive 'private' verhindert das gemeinsame Caching personalisierter Inhalte.
  • Die Direktive 'no-store' verhindert jegliches Caching.
  • Die Direktive 'no-cache' verlangt eine Validierung vor der Wiederverwendung.
  • Browser-Entwicklertools können verwendet werden, um Cache-Control-Header zu überprüfen.
  • Das Verständnis des Unterschieds zwischen privaten und gemeinsam genutzten Caches ist entscheidend.
  • Legacy-Caching-Verhalten (bfcache) kann Cache-Control-Direktiven umgehen.
  • HTTP/1.0-Caches unterstützen 'no-cache' möglicherweise nicht vollständig.

Diese Header bieten einen Mechanismus zur Steuerung des Caching-Verhaltens, aber sie gewährleisten keinen vollständigen Schutz vor Caching oder Informationslecks. Browser-Implementierungen und Zwischen-Caches können sich unterschiedlich verhalten, und Benutzer können Caching-Einstellungen überschreiben. Darüber hinaus bedeutet die Direktive 'no-cache' nicht, dass 'kein Speichern'. Der Gültigkeitsbereich wird durch die spezifischen verwendeten Header und die von Browsern und Zwischen-Caches implementierten Caching-Richtlinien bestimmt.

Quellen

  1. MDN: Cache-Control directives ↗
  2. MDN: HTTP caching guide ↗
Nach oben ↑