If-None-Match

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 Anfrage konditional. Der Server gibt die angeforderte Ressource in GET- und HEAD-Methoden mit einem 200-Status zurück, nur wenn es keine ETag gibt, die mit denen im If-None-Match-Header übereinstimmen. Bei anderen Methoden wird die Anfrage nur verarbeitet, wenn das eventuell vorhandene Ressourcens ETag mit keinem der aufgeführten Werte übereinstimmt.

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

Der Vergleich mit dem gespeicherten ETag verwendet den schwachen Vergleichsalgorithmus, was bedeutet, dass zwei Dateien als identisch betrachtet werden, wenn der Inhalt äquivalent ist – sie müssen nicht Byte für Byte identisch sein. Zum Beispiel würden zwei Seiten, die sich nur im Erstellungsdatum im Footer unterscheiden, immer noch als identisch betrachtet werden.

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

Es gibt zwei häufige Fälle zur Verwendung von If-None-Match in Anfragen:

  • Für GET- und HEAD-Methoden, um eine zwischengespeicherte Entität zu aktualisieren, die mit einem ETag verknüpft ist.
  • 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, wobei sichergestellt wird, dass der Upload nicht versehentlich einen anderen Upload überschreibt und die Daten des vorherigen PUT verliert; dieses Problem ist eine Variante des Problemd der verlorenen Aktualisierung.
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>

Entity-Tags, die die angeforderten Ressourcen eindeutig repräsentieren. Sie sind eine Zeichenfolge von ASCII-Zeichen, die in Anführungszeichen gesetzt sind (wie "675af34563dc-tr34"), und können durch W/ vorangestellt werden, um anzuzeigen, dass der schwache Vergleichsalgorithmus verwendet werden soll (dies ist allerdings sinnlos mit If-None-Match, da nur dieser Algorithmus verwendet wird).

*

Der Asterisk ist ein spezieller Wert, der jede Ressource repräsentiert. Sie sind nur nützlich, wenn eine Ressource hochgeladen wird, üblicherweise mit PUT, um zu überprüfen, ob eine andere Ressource mit der gleichen 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

BCD tables only load in the browser

Siehe auch