ETag

Der ETag (oder Entity-Tag) HTTP-Antwort-Header ist ein Bezeichner für eine spezifische Version einer Ressource. Er ermöglicht es Caches, effizienter zu arbeiten und Bandbreite zu sparen, da ein Webserver keine vollständige Antwort erneut senden muss, wenn sich der Inhalt nicht geändert hat. Zudem helfen Etags dabei, gleichzeitige Aktualisierungen einer Ressource zu verhindern, die sich gegenseitig überschreiben ("mid-air collisions").

Wenn sich die Ressource unter einer bestimmten URL ändert, muss ein neuer Etag-Wert generiert werden. Ein Vergleich von ihnen kann bestimmen, ob zwei Repräsentationen einer Ressource identisch sind.

Header-Typ Antwort-Header
Verbotener Header-Name nein

Syntax

http
ETag: W/"<etag_value>"
ETag: "<etag_value>"

Direktiven

W/ Optional

'W/' (Groß-/Kleinschreibung beachten) zeigt an, dass ein schwacher Validator verwendet wird. Schwache Etags sind einfach zu erzeugen, aber für Vergleiche weit weniger nützlich. Starke Validatoren sind ideal für Vergleiche, können jedoch sehr schwer effizient zu erzeugen sein. Schwache ETag-Werte von zwei Repräsentationen derselben Ressourcen könnten semantisch äquivalent sein, aber nicht byteweise identisch. Das bedeutet, dass schwache Etags das Caching verhindern, wenn Bytebereich-Anfragen verwendet werden, jedoch starke Etags ermöglichen es, dass Bereichsanfragen weiterhin zwischengespeichert werden.

"<etag_value>"

Entity-Tag, das die angeforderte Ressource eindeutig darstellt. Es ist eine Zeichenkette von ASCII-Zeichen, die in Anführungszeichen gesetzt ist, wie "675af34563dc-tr34". Die Methode, mit der ETag-Werte generiert werden, ist nicht spezifiziert. Typischerweise ist der ETag-Wert ein Hash des Inhalts, ein Hash des letzten Änderungszeitpunktes oder nur eine Revisionsnummer. Beispielsweise kann eine Wiki-Engine einen hexadezimalen Hash des Inhalts des Dokumentartikels verwenden.

Beispiele

http
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
ETag: W/"0815"

Vermeidung von "mid-air collisions"

Mit Hilfe der ETag- und If-Match-Header können Sie Bearbeitungskollisionen in der Luft erkennen.

Zum Beispiel kann beim Bearbeiten eines Wikis der aktuelle Wiki-Inhalt gehasht und in einen Etag-Header in der Antwort eingefügt werden:

http
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Beim Speichern der Änderungen an einer Wiki-Seite (Senden von Daten) enthält die POST-Anfrage den If-Match-Header mit den ETag-Werten, um die Aktualität zu überprüfen.

http
If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Wenn die Hash-Werte nicht übereinstimmen, bedeutet dies, dass das Dokument zwischenzeitlich bearbeitet wurde und ein 412 Precondition Failed-Fehler ausgelöst wird.

Zwischenspeicherung unveränderter Ressourcen

Eine weitere typische Verwendung des ETag-Headers besteht darin, Ressourcen, die sich nicht geändert haben, zwischenzuspeichern. Wenn ein Benutzer eine bestimmte URL erneut besucht (die einen ETag gesetzt hat), und sie veraltet ist (zu alt, um als nutzbar angesehen zu werden), sendet der Client den Wert seines ETag im If-None-Match-Headerfeld mit:

http
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Der Server vergleicht das ETag des Clients (gesendet mit If-None-Match) mit dem ETag für die aktuelle Version der Ressource. Wenn beide Werte übereinstimmen (das heißt, die Ressource hat sich nicht geändert), sendet der Server den Status 304 Not Modified ohne Inhalt zurück, was dem Client mitteilt, dass die zwischengespeicherte Version der Antwort weiterhin gut nutzbar (frisch) ist.

Spezifikationen

Specification
HTTP Semantics
# field.etag

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch