Zum Hauptinhalt springen

3. Speichern von Antworten in Caches

Ein Cache darf eine Antwort auf keine Anfrage speichern, es sei denn (MUST NOT):

  • die Anforderungsmethode wird vom Cache verstanden und ist als zwischenspeicherbar definiert, und

  • der Antwort-Statuscode wird vom Cache verstanden, und

  • die Cache-Direktive „no-store" (siehe Abschnitt 5.2) erscheint nicht in den Header-Feldern der Anfrage oder der Antwort, und

  • die Antwort-Direktive „private" (siehe Abschnitt 5.2.2.6) erscheint nicht in der Antwort, wenn der Cache gemeinsam genutzt wird, und

  • das Header-Feld Authorization (siehe Abschnitt 4.2 von [RFC7235]) erscheint nicht in der Anfrage, wenn der Cache gemeinsam genutzt wird, es sei denn, die Antwort erlaubt es ausdrücklich (siehe Abschnitt 3.2), und

  • die Antwort entweder:

    • enthält ein Header-Feld Expires (siehe Abschnitt 5.3), oder

    • enthält eine Antwort-Direktive max-age (siehe Abschnitt 5.2.2.8), oder

    • enthält eine Antwort-Direktive s-maxage (siehe Abschnitt 5.2.2.9) und der Cache wird gemeinsam genutzt, oder

    • enthält eine Cache-Control-Erweiterung (siehe Abschnitt 5.2.3), die ihre Zwischenspeicherung erlaubt, oder

    • hat einen Statuscode, der standardmäßig als zwischenspeicherbar definiert ist (siehe Abschnitt 4.2.2), oder

    • enthält eine Antwort-Direktive public (siehe Abschnitt 5.2.2.5).

Beachten Sie, dass jede der oben aufgeführten Anforderungen durch eine Cache-Control-Erweiterung außer Kraft gesetzt werden kann; siehe Abschnitt 5.2.3.

In diesem Zusammenhang hat ein Cache eine Anforderungsmethode oder einen Antwort-Statuscode „verstanden", wenn er sie erkennt und alle spezifizierten zwischenspeicherbezogenen Verhaltensweisen implementiert.

Beachten Sie, dass im normalen Betrieb einige Caches eine Antwort nicht speichern, die weder einen Cache-Validator noch eine explizite Ablaufzeit hat, da solche Antworten üblicherweise nicht sinnvoll zu speichern sind. Caches ist es jedoch nicht verboten, solche Antworten zu speichern.

3.1. Speichern unvollständiger Antworten​

Eine Antwortnachricht gilt als vollständig, wenn alle durch die Nachrichtenrahmenstruktur ([RFC7230]) angezeigten Oktette empfangen wurden, bevor die Verbindung geschlossen wurde. Wenn die Anforderungsmethode GET ist, der Antwort-Statuscode 200 (OK) ist und die gesamte Kopfzeilensektion der Antwort empfangen wurde, kann ein Cache einen unvollständigen Antwortnachrichtenkörper speichern (MAY), sofern der Cache-Eintrag als unvollständig vermerkt ist. Ebenso kann eine 206 (Partial Content)-Antwort gespeichert werden (MAY), als wäre sie ein unvollständiger 200 (OK)-Cache-Eintrag. Ein Cache darf jedoch unvollständige Antworten oder Teilinhalt-Antworten nicht speichern (MUST NOT), wenn er die Header-Felder Range und Content-Range nicht unterstützt oder die in diesen Feldern verwendeten Bereichseinheiten nicht versteht.

Ein Cache kann eine gespeicherte unvollständige Antwort vervollständigen (MAY), indem er eine nachfolgende Bereichsanfrage ([RFC7233]) stellt und die erfolgreiche Antwort wie in Abschnitt 3.3 definiert mit dem gespeicherten Eintrag zusammenführt. Ein Cache darf eine unvollständige Antwort nicht verwenden, um Anfragen zu beantworten (MUST NOT), es sei denn, die Antwort wurde vervollständigt oder die Anfrage ist partiell und spezifiziert einen Bereich, der vollständig innerhalb der unvollständigen Antwort liegt. Ein Cache darf eine Teilantwort nicht an einen Client senden, ohne sie ausdrücklich mit dem Statuscode 206 (Partial Content) als solche zu kennzeichnen (MUST NOT).

3.2. Speichern von Antworten auf authentifizierte Anfragen​

Ein gemeinsamer Cache darf eine zwischengespeicherte Antwort auf eine Anfrage mit einem Header-Feld Authorization (Abschnitt 4.2 von [RFC7235]) nicht verwenden, um eine nachfolgende Anfrage zu erfüllen (MUST NOT), es sei denn, in der Antwort ist eine Cache-Direktive vorhanden, die das Speichern solcher Antworten erlaubt.

In dieser Spezifikation haben die folgenden Cache-Control-Antwortdirektiven (Abschnitt 5.2.2) diese Wirkung: must-revalidate, public und s-maxage.

Beachten Sie, dass zwischengespeicherte Antworten, die die Antwortdirektiven „must-revalidate" und/oder „s-maxage" enthalten, von gemeinsamen Caches nicht veraltet ausgeliefert werden dürfen (Abschnitt 4.2.4). Insbesondere kann eine Antwort mit entweder „max-age=0, must-revalidate" oder „s-maxage=0" nicht verwendet werden, um eine nachfolgende Anfrage zu erfüllen, ohne sie beim Ursprungsserver erneut zu validieren.

3.3. Kombinieren von Teilinhalten​

Eine Antwort überträgt möglicherweise nur eine partielle Repräsentation, wenn die Verbindung vorzeitig geschlossen wurde oder wenn die Anfrage einen oder mehrere Range-Spezifizierer ([RFC7233]) verwendete. Nach mehreren solchen Übertragungen hat ein Cache möglicherweise mehrere Bereiche derselben Repräsentation empfangen. Ein Cache kann diese Bereiche zu einer einzigen gespeicherten Antwort zusammenfassen (MAY) und diese Antwort wiederverwenden, um spätere Anfragen zu erfüllen, wenn sie alle denselben starken Validator gemeinsam haben und der Cache die Client-Anforderungen in Abschnitt 4.3 von [RFC7233] einhält.

Beim Zusammenfassen der neuen Antwort mit einer oder mehreren gespeicherten Antworten muss ein Cache (MUST):

  • alle Header-Felder Warning in der gespeicherten Antwort mit warn-code 1xx löschen (siehe Abschnitt 5.5);

  • alle Header-Felder Warning in der gespeicherten Antwort mit warn-code 2xx beibehalten; und

  • andere in der neuen Antwort bereitgestellte Header-Felder, außer Content-Range, verwenden, um alle Vorkommen der entsprechenden Header-Felder in der gespeicherten Antwort zu ersetzen.