Zum Hauptinhalt springen

2. Overview of Cache Operation

Ein ordnungsgemäßer Cache-Betrieb bewahrt die Semantik von HTTP-Übertragungen, während die Übertragung von bereits im Cache gehaltenen Informationen reduziert wird. Siehe Abschnitt 3 für Details darüber, wie ein Cache bestimmen kann, welche Antworten cachefähig sind, und Abschnitt 4 für Details zum Konstruieren von Antworten aus Cache-Einträgen. Dieser Abschnitt bietet einen Überblick darüber, wie Caches gespeicherte Antworten auswählen und aktualisieren.

Obwohl Caching eine vollständig OPTIONALE (OPTIONAL) Funktion von HTTP ist, kann davon ausgegangen werden, dass die Wiederverwendung einer gecachten Antwort wünschenswert ist und dass eine solche Wiederverwendung das Standardverhalten ist, wenn keine Anforderung oder lokale Konfiguration dies verhindert. Daher konzentrieren sich die HTTP-Cache-Anforderungen darauf, zu verhindern, dass ein Cache eine nicht wiederverwendbare Antwort speichert oder eine gespeicherte Antwort unangemessen wiederverwendet, anstatt Caches zu verpflichten, immer bestimmte Antworten zu speichern und wiederzuverwenden.

Die Abfragekomponente (Query Component) eines Anfrageziels (Abschnitt 5.3 von [RFC7230]) kann Informationen über die Anfrage enthalten, die für einen Benutzer, eine Kohorte von Benutzern oder den aktuellen Zustand des Benutzers spezifisch sind. Im Allgemeinen ist es für einen Cache nicht sicher, eine Antwort auf eine Anfrage mit einer Abfragekomponente wiederzuverwenden, um dieselbe Anfrage von einem anderen Benutzer zu erfüllen, da die Benutzer möglicherweise unterschiedliche Abfragewerte in ihren Anfragen haben, selbst wenn die Pfadabschnitte gleich sind. Ein Cache-Empfänger, der eine erfolgreiche Antwort mit einer Abfragekomponente im Anfrageziel erhält, SOLLTE NICHT (SHOULD NOT) diese Antwort für eine Anfrage mit einer anderen Abfragekomponente wiederverwenden, es sei denn, die Antwort erlaubt dies explizit mit Cache-Control-Direktiven (Abschnitt 5.2).

Ein Cache kann eine Antwort auf eine Anfrage mit einer Abfragekomponente speichern und wiederverwenden, wenn die Antwort explizit durch Cache-Control-Direktiven zugelassen wird oder die Antwort einen Validator enthält (Abschnitt 2.3 von [RFC7232]) und der Cache den Validierungsanforderungen folgt. Wenn dies geschieht, DARF (MAY) ein Cache diese Antwort verwenden, um eine andere Anfrage zu erfüllen, vorbehaltlich der Einschränkung, dass der Cache-Schlüssel übereinstimmt (Abschnitt 4.1), alle anwendbaren Frische-Anforderungen erfüllt sind (Abschnitt 4.2) und alle anwendbaren Cache-Anforderungen, die von der Anfrage und der gespeicherten Antwort auferlegt werden, erfüllt sind.

Verschiedene Mechanismen existieren, durch die ein Cache über die aktuelle Gültigkeit einer gecachten Antwort lernen kann. Eine gecachte Antwort ist „frisch" (Fresh), wenn ihr Alter ihre Frische-Lebensdauer (Freshness Lifetime) noch nicht überschritten hat. Umgekehrt ist eine gecachte Antwort „veraltet" (Stale), wenn sie lange genug im Cache war, um ihre Frische-Lebensdauer zu erreichen oder zu überschreiten.

Eine frische Antwort kann verwendet werden, um nachfolgende Anfragen zu erfüllen, ohne den Ursprungsserver zu kontaktieren, wodurch die Effizienz verbessert wird. Das Protokoll umfasst Mechanismen, mit denen ein Ursprungsserver eine explizite Frische-Lebensdauer zuweisen kann, die Berechnung einer heuristischen Frische-Lebensdauer, wenn keine explizite festgelegt ist, und einen Mechanismus zur Validierung einer gecachten Antwort, um ihre Frische-Lebensdauer zu verlängern, nachdem sie veraltet ist.

Der primäre Mechanismus zur Zuweisung von Frische besteht darin, dass ein Ursprungsserver eine explizite Ablaufzeit entweder über das Expires-Header-Feld (Abschnitt 5.3) oder die max-age-Antwortdirektive (Abschnitt 5.2.2.8) sendet. Im Allgemeinen weisen Ursprungsserver eine explizite Ablaufzeit zu, die ausreicht, um alle erwarteten Verwendungen der Antwort zu erfüllen. Eine großzügige Lebensdauer kann gegeben werden, um eine häufige Wiederverwendung durch Caches zu ermöglichen; eine konservative Lebensdauer kann gegeben werden, wenn bekannt ist, dass sich der Inhalt regelmäßig ändert.

Wenn keine explizite Ablaufzeit vorhanden ist, DARF (MAY) ein Cache eine heuristische Ablaufzeit berechnen. Ein Cache DARF NICHT (MUST NOT) heuristische Ablaufzeiten für Antworten mit Statuscodes verwenden, deren Cachefähigkeit nicht durch diese Spezifikation definiert ist, wie z. B. Umleitungen außer 300, 301 oder 308 (siehe Abschnitt 6 von [RFC7231]), oder wenn der Statuscode einen Fehler anzeigt (d. h., der Statuscode ist größer oder gleich 400).

Wenn eine gespeicherte Antwort veraltet ist, verwendet ein Cache typischerweise Validierung (bedingte Anfragen, wie in [RFC7232] definiert), um die gespeicherte Antwort zu aktualisieren und die unnötige Übertragung von Darstellungsdaten zu vermeiden. Eine veraltete Antwort kann ohne Validierung weiterhin verwendet werden, wenn der getrennte Betrieb durch die Konfiguration des Caches zugelassen wird oder die Anfragedirektiven in Cache-Control dies zulassen (Abschnitt 5.2).