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
-Anforderungsheader macht eine bedingte Anfrage.
Der Server gibt die angeforderte Ressource in den Methoden GET
und HEAD
mit einem 200
-Status nur dann zurück, wenn er kein ETag
hat, das mit denjenigen im If-None-Match
-Header übereinstimmt.
Bei anderen Methoden wird die Anfrage nur verarbeitet, wenn das eventuell vorhandene ETag
der Ressource mit keinem der aufgelisteten 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 Headerfelder, die bei 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 bewirken, 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 durch ihr Erstellungsdatum im Fußzeilenbereich unterscheiden, immer noch als identisch betrachtet.
Wird in Kombination mit If-Modified-Since
verwendet, hat If-None-Match
Vorrang, wenn der Server ihn unterstützt.
Es gibt zwei gängige Fälle für die Verwendung von If-None-Match
in Anfragen:
- Für die Methoden
GET
undHEAD
, um eine zwischengespeicherte Entität zu aktualisieren, die mit einem zugehörigen ETag versehen ist. - Für andere Methoden, insbesondere für
PUT
, kannIf-None-Match
mit dem Wert*
verwendet werden, um eine Datei nur dann zu speichern, wenn sie noch nicht existiert, wobei sichergestellt wird, dass der Upload nicht versehentlich einen anderen Upload überschreibt und die Daten des vorherigenPUT
verliert; dieses Problem ist eine Variante des Lost-Update-Problems.
Header-Typ | Anforderungsheader |
---|---|
Verbotener Anforderungsheader | Nein |
Syntax
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 darstellen. Sie sind eine Zeichenfolge von ASCII-Zeichen, die in Anführungszeichen gesetzt sind (z.B.
"675af34563dc-tr34") und können mit
W/vorangestellt werden, um anzugeben, dass der schwache Vergleichsalgorithmus verwendet werden soll (das ist bei
If-None-Match` sinnlos, da es nur diesen Algorithmus verwendet). *
-
Der Asterisk ist ein spezieller Wert, der jede Ressource darstellt. Sie sind nur dann nützlich, wenn eine Ressource hochgeladen wird, in der Regel mit
PUT
, um zu überprüfen, ob eine andere Ressource mit der Identität bereits zuvor hochgeladen wurde.
Beispiele
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
ETag
If-Match
,If-Modified-Since
,If-Unmodified-Since
bedingte Anforderungsheader304 Not Modified
,412 Precondition Failed
Antwortstatuscodes