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
mit keinem der aufgeführten Werte übereinstimmt.ETag
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
- undHEAD
-Methoden, um eine zwischengespeicherte Entität zu aktualisieren, die mit einem ETag verknüpft ist. - Für andere Methoden, insbesondere für
PUT
, kannIf-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 vorherigenPUT
verliert; dieses Problem ist eine Variante des Problemd der verlorenen Aktualisierung.
Header-Typ | Request-Header |
---|---|
Verbotener Request-Header | 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 repräsentieren. Sie sind eine Zeichenfolge von ASCII-Zeichen, die in Anführungszeichen gesetzt sind (wie
"675af34563dc-tr34"
), und können durchW/
vorangestellt werden, um anzuzeigen, dass der schwache Vergleichsalgorithmus verwendet werden soll (dies ist allerdings sinnlos mitIf-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
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
ETag
If-Match
,If-Modified-Since
,If-Unmodified-Since
konditionale Anfrage-Header304 Not Modified
,412 Precondition Failed
Antwort-Statuscodes