3. Speichern von Antworten in Caches (Storing Responses in Caches)
Ein Cache DARF NICHT (MUST NOT) eine Antwort auf eine Anfrage speichern, es sei denn:
- Die Anfragemethode wird vom Cache verstanden und ist als cachefähig definiert, und
- der Antwortstatuscode wird vom Cache verstanden, und
- die "no-store"-Cache-Direktive (siehe Abschnitt 5.2) erscheint nicht in den Anfrage- oder Antwort-Header-Feldern, und
- die "private"-Antwortdirektive (siehe Abschnitt 5.2.2.6) erscheint nicht in der Antwort, wenn der Cache gemeinsam genutzt wird, und
- das Authorization-Header-Feld (siehe Abschnitt 4.2 von
[RFC7235]) erscheint nicht in der Anfrage, wenn der Cache gemeinsam genutzt wird, es sei denn, die Antwort erlaubt dies ausdrücklich (siehe Abschnitt 3.2), und - die Antwort erfüllt eine der folgenden Bedingungen:
- enthält ein Expires-Header-Feld (siehe Abschnitt 5.3), oder
- enthält eine max-age-Antwortdirektive (siehe Abschnitt 5.2.2.8), oder
- enthält eine s-maxage-Antwortdirektive (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 das Caching erlaubt, oder
- hat einen Statuscode, der standardmäßig als cachefähig definiert ist (siehe Abschnitt 4.2.2), oder
- enthält eine public-Antwortdirektive (siehe Abschnitt 5.2.2.5).
Beachten Sie, dass jede der oben aufgeführten Anforderungen durch eine Cache-Control-Erweiterung überschrieben werden kann; siehe Abschnitt 5.2.3.
In diesem Kontext hat ein Cache eine Anfragemethode oder einen Antwortstatuscode „verstanden", wenn er ihn erkennt und alle spezifizierten cachebezogenen Verhaltensweisen implementiert.
Beachten Sie, dass im normalen Betrieb einige Caches keine Antwort speichern werden, die weder einen Cache-Validator noch eine explizite Ablaufzeit hat, da solche Antworten normalerweise nicht nützlich zu speichern sind. Caches sind jedoch nicht daran gehindert, solche Antworten zu speichern.
3.1. Speichern unvollständiger Antworten (Storing Incomplete Responses)
Eine Antwortnachricht gilt als vollständig, wenn alle durch die Nachrichtenrahmung ([RFC7230]) angegebenen Oktette empfangen werden, bevor die Verbindung geschlossen wird. Wenn die Anfragemethode GET ist, der Antwortstatuscode 200 (OK) ist und der gesamte Antwort-Header-Abschnitt empfangen wurde, DARF (MAY) ein Cache einen unvollständigen Antwortnachrichtentext speichern, wenn der Cache-Eintrag als unvollständig aufgezeichnet wird. Ebenso DARF (MAY) eine 206 (Partial Content) Antwort gespeichert werden, als wäre sie ein unvollständiger 200 (OK) Cache-Eintrag. Ein Cache DARF JEDOCH NICHT (MUST NOT) unvollständige oder Teilinhalts-Antworten speichern, wenn er die Range- und Content-Range-Header-Felder nicht unterstützt oder die in diesen Feldern verwendeten Bereichseinheiten nicht versteht.
Ein Cache DARF (MAY) eine gespeicherte unvollständige Antwort vervollständigen, indem er eine nachfolgende Bereichsanfrage ([RFC7233]) stellt und die erfolgreiche Antwort mit dem gespeicherten Eintrag kombiniert, wie in Abschnitt 3.3 definiert. Ein Cache DARF NICHT (MUST NOT) eine unvollständige Antwort verwenden, um Anfragen zu beantworten, es sei denn, die Antwort wurde vervollständigt oder die Anfrage ist teilweise und gibt einen Bereich an, der vollständig innerhalb der unvollständigen Antwort liegt. Ein Cache DARF NICHT (MUST NOT) eine Teilantwort an einen Client senden, ohne sie explizit als solche mit dem Statuscode 206 (Partial Content) zu kennzeichnen.
3.2. Speichern von Antworten auf authentifizierte Anfragen (Storing Responses to Authenticated Requests)
Ein gemeinsam genutzter Cache DARF NICHT (MUST NOT) eine gecachte Antwort auf eine Anfrage mit einem Authorization-Header-Feld (Abschnitt 4.2 von [RFC7235]) verwenden, um eine nachfolgende Anfrage zu erfüllen, es sei denn, eine Cache-Direktive, die das Speichern solcher Antworten erlaubt, ist in der Antwort vorhanden.
In dieser Spezifikation haben die folgenden Cache-Control-Antwortdirektiven (Abschnitt 5.2.2) eine solche Wirkung: must-revalidate, public und s-maxage.
Beachten Sie, dass gecachte Antworten, die die Antwortdirektiven "must-revalidate" und/oder "s-maxage" enthalten, nicht von gemeinsam genutzten Caches als veraltet bereitgestellt 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 auf dem Ursprungsserver erneut zu validieren.
3.3. Zusammenführen von Teilinhalten (Combining Partial Content)
Eine Antwort kann nur eine partielle Darstellung übertragen, wenn die Verbindung vorzeitig geschlossen wurde oder wenn die Anfrage einen oder mehrere Range-Spezifizierer ([RFC7233]) verwendet hat. Nach mehreren solchen Übertragungen hat ein Cache möglicherweise mehrere Bereiche derselben Darstellung erhalten. Ein Cache DARF (MAY) diese Bereiche zu einer einzigen gespeicherten Antwort kombinieren und diese Antwort wiederverwenden, um spätere Anfragen zu erfüllen, wenn sie alle denselben starken Validator teilen und der Cache den Kundenanforderungen in Abschnitt 4.3 von [RFC7233] entspricht.
Beim Kombinieren der neuen Antwort mit einer oder mehreren gespeicherten Antworten MUSS (MUST) ein Cache:
- alle Warning-Header-Felder in der gespeicherten Antwort mit warn-code 1xx löschen (siehe Abschnitt 5.5);
- alle Warning-Header-Felder in der gespeicherten Antwort mit warn-code 2xx beibehalten; und
- andere in der neuen Antwort bereitgestellte Header-Felder, mit Ausnahme von Content-Range, verwenden, um alle Instanzen der entsprechenden Header-Felder in der gespeicherten Antwort zu ersetzen.