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
undHEAD
, um eine zwischengespeicherte Entität zu aktualisieren, die einen zugehörigen ETag hat. - 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, was garantiert, 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 | 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>
-
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 bei
If-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
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
- Bedingungs-Request-Header:
If-Match
,If-Modified-Since
,If-Unmodified-Since
- Antwortstatus-Codes:
304 Not Modified
,412 Precondition Failed