If-None-Match header

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Der HTTP If-None-Match Request-Header macht eine Bedingungsanfrage. Der Server liefert die angeforderte Ressource bei den Methoden GET und HEAD mit dem Status 200 nur, wenn er keinen ETag hat, der zu denen im If-None-Match-Header passt. Bei anderen Methoden wird die Anfrage nur bearbeitet, wenn der schließlich vorhandene Ressourcen-ETag mit keinem der aufgeführten Werte übereinstimmt.

Wenn die Bedingung bei den Methoden GET und HEAD fehlschlägt, muss der Server einen 304 Not Modified zurückgeben und alle der folgenden Header-Felder, die in einer 200-Antwort auf dieselbe Anfrage gesendet worden wären: Cache-Control, Content-Location, Date, ETag, Expires und Vary. Für Methoden, die serverseitige Änderungen vornehmen, wird bei Fehlschlagen der Bedingung der 412 Precondition Failed verwendet.

Der Vergleich mit dem gespeicherten ETag verwendet den weak comparison algorithm, was bedeutet, dass zwei Dateien als identisch betrachtet werden, wenn der Inhalt äquivalent ist — sie müssen nicht byteweise identisch sein. Zwei Seiten, die sich beispielsweise nur durch ihr Erstellungsdatum im Footer unterscheiden, würden dennoch als identisch betrachtet.

Wird If-None-Match in Kombination mit If-Modified-Since verwendet, hat If-None-Match Vorrang, wenn der Server es unterstützt.

Es gibt zwei häufige Anwendungsfälle für die Verwendung von If-None-Match in Anfragen:

  • Für die Methoden GET und HEAD, um eine zwischengespeicherte Entität zu aktualisieren, die einen zugehörigen ETag hat.
  • Für andere Methoden, insbesondere für PUT, kann If-None-Match mit dem Wert * verwendet werden, um eine Datei nur zu speichern, wenn sie noch nicht existiert, was garantiert, dass der Upload nicht versehentlich einen anderen Upload überschreibt und die Daten des vorherigen PUT verliert; dieses Problem ist eine Variante des Lost Update Problems.
Header-Typ Request-Header
Verbotener Request-Header Nein

Syntax

http
If-None-Match: "<etag_value>"
If-None-Match: "<etag_value>", "<etag_value>", …
If-None-Match: *

Direktiven

<etag_value>

Entitätstags, die die angeforderten Ressourcen eindeutig repräsentieren. Sie sind eine Zeichenfolge aus ASCII-Zeichen, die in Anführungszeichen gesetzt sind (z. B. "675af34563dc-tr34") und können mit W/versehen sein, um anzuzeigen, dass der weak comparison algorithm verwendet werden soll (dies ist jedoch beiIf-None-Match` nutzlos, da es nur diesen Algorithmus verwendet).

*

Der Stern ist ein spezieller Wert, der jede Ressource repräsentiert. Sie sind nur nützlich beim Hochladen einer Ressource, normalerweise mit PUT, um zu prüfen, ob eine andere Ressource mit derselben Identität bereits hochgeladen wurde.

Beispiele

http
If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

If-None-Match: W/"67ab43", "54ed21", "7892dd"

If-None-Match: *

Spezifikationen

Specification
HTTP Semantics
# field.if-none-match

Browser-Kompatibilität

Siehe auch