Zum Hauptinhalt springen

4.3. Validierung (Validation)

Wenn ein Cache eine oder mehrere gespeicherte Antworten für einen angeforderten URI hat, aber keine davon bereitstellen kann (z. B., weil sie nicht frisch sind oder eine Anfragedirektive dies verbietet), kann er den Mechanismus für bedingte Anfragen [RFC7232] in der weitergeleiteten Anfrage verwenden, um dem Ursprungsserver die Möglichkeit zu geben, eine gültige gespeicherte Antwort zur Verwendung auszuwählen, wobei die gespeicherten Metadaten im Prozess aktualisiert werden, oder die gespeicherte(n) Antwort(en) durch eine neue Antwort zu ersetzen. Dieser Prozess wird als "Validierung" oder "Revalidierung" der gespeicherten Antwort bezeichnet.

4.3.1. Senden einer Validierungsanfrage (Sending a Validation Request)​

Bei der Generierung einer bedingten Anfrage zur Validierung beginnt ein Cache entweder mit einer Anfrage, die er zu erfüllen versucht, oder (wenn er die Anfrage unabhängig initiiert) synthetisiert eine Anfrage unter Verwendung einer gespeicherten Antwort, indem er die Methode, den Ziel-URI und relevante Anfrage-Header-Felder kopiert.

Anschließend aktualisiert er diese Anfrage mit einem oder mehreren Vorbedingung-Header-Feldern. Diese enthalten Validator-Metadaten (Abschnitt 2.3 von [RFC7232]), die aus den zu validierenden gespeicherten Antwort(en) entnommen wurden. Typischerweise umfasst dies die Last-Modified- und/oder ETag-Feldwerte der gespeicherten Antwort.

Der Cache kann dann die bedingte Anfrage an den Ursprungsserver (oder möglicherweise an einen nachgelagerten Cache, der in einem Via-Header-Feld aufgeführt ist) senden.

4.3.2. Behandeln einer empfangenen Validierungsanfrage (Handling a Received Validation Request)​

Jeder Client in der Anfragekette kann seinen eigenen Cache haben, daher ist es üblich, dass ein Cache bei einem Vermittler bedingte Anfragen von anderen (ausgehenden) Caches erhält. Ebenso können einige Clients Uhrenabweichungen oder andere Probleme haben, die dazu führen, dass sie bedingte Anfragen generieren, ohne sie zu verstehen, oder solche Anfragen können von einer Implementierung generiert werden, die zugrunde liegende HTTP-Bibliotheken verwendet.

Dies bedeutet, dass das Bereitstellen einer 304 (Not Modified)- oder 412 (Precondition Failed)-Antwort auf eine bedingte Anfrage nicht implizieren kann, dass der Client solche Antworten versteht oder dass er eine zwischengespeicherte Kopie hat (selbst wenn er eine hat, könnte sie entfernt worden sein).

Wenn ein Cache eine Anfrage erhält, die ein Validator-Feld enthält (z. B. ein If-None-Match-Header-Feld), DARF er NICHT (MUST NOT) eine 304 (Not Modified)-Antwort zurückgeben, es sei denn, er ist sicher, dass die gespeicherte Antwort, die Gegenstand der bedingten Anfrage ist, die neueste Validierungsantwort ist, die von vorgelagerten Stellen empfangen wurde. Insbesondere müssen Vermittler überprüfen, ob die Validatoren der gespeicherten Antwort (ETag- und Last-Modified-Feldwerte, falls vorhanden) Byte für Byte mit denen in der bedingten Anfrage identisch sind.

Beachten Sie, dass ein Cache eine solche Überprüfung nicht durchführen muss, wenn er keine gespeicherte Antwort hat (d. h., er führt "On-Demand"-Caching durch).

Ein Cache DARF NICHT (MUST NOT) eine 304 (Not Modified)-Antwort als Antwort auf eine Anfrage senden, die entweder ein If-None-Match- oder If-Modified-Since-Vorbedingung-Header-Feld enthält, dessen Bedingung als falsch bewertet wird, da der Client keine gültige Antwort aus der gespeicherten Antwort des Caches konstruieren könnte.

Stattdessen wird ein Cache, der eine bedingte Anfrage erhält und eine gespeicherte Antwort hat, die zur Bereitstellung als Antwort geeignet ist, entweder:

  • eine 304 (Not Modified)-Antwort senden, wenn die gespeicherte Antwort frisch ist (Abschnitt 4.2) oder erfolgreich validiert wurde (Abschnitt 4.3), oder
  • die Anfrage mit seiner eigenen bedingten Anfrage, die versucht, die gespeicherte Antwort zu validieren, an den Ursprungsserver weiterleiten.

Im letzteren Fall wird der Cache einen Validator in die weitergeleitete Anfrage aufnehmen. Die weitergeleitete Anfrage MUSS (MUST) den neuesten Satz von Validatoren verwenden, der mit der gespeicherten Antwort verknüpft ist.