Zum Hauptinhalt springen

10. HTTP Headers for Distributed Authoring (HTTP-Header für verteiltes Authoring)

10. HTTP Headers for Distributed Authoring (HTTP-Header für verteiltes Authoring)

WebDAV definiert mehrere neue HTTP-Header, die zur Unterstützung von Funktionen für verteiltes Authoring (Distributed Authoring) dienen.

10.1 DAV Header

Der DAV-Header gibt an, welche WebDAV-Konformitätsstufen (Compliance Classes) und optionalen Erweiterungen der Server unterstützt.

Syntax

DAV: 1, 2, 3, access-control, calendar-access

Konformitätsstufen (Compliance Levels)

  • 1: Grundlegende WebDAV-Unterstützung (PROPFIND, PROPPATCH, MKCOL, erweiterte GET/HEAD, erweiterte PUT, erweiterte DELETE, OPTIONS, COPY, MOVE)
  • 2: Umfasst Stufe 1 sowie Unterstützung für LOCK und UNLOCK
  • 3: Umfasst Stufe 2 sowie Unterstützung für geordnete Sammlungen (optional)

Verwendung

OPTIONS-Antwort:

OPTIONS /resource HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
DAV: 1, 2
Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK

Der DAV-Header MUSS in allen OPTIONS-Antworten enthalten sein, wenn der Server WebDAV unterstützt. Er DARF NICHT in Anfragen vom Client verwendet werden.

10.2 Depth Header

Der Depth-Header gibt an, auf welche Tiefe einer Ressourcenhierarchie (Resource Hierarchy) eine Operation angewendet werden soll.

Syntax

Depth: 0 | 1 | infinity

Bedeutung der Werte

  • 0: Nur auf die Zielressource selbst anwenden
  • 1: Auf die Ressource und ihre direkten Mitglieder anwenden
  • infinity: Rekursiv auf die Ressource und alle ihre Nachkommen anwenden

Unterstützte Methoden

MethodeDepth-UnterstützungStandardwert
PROPFIND0, 1, infinityinfinity
COPY0, infinityinfinity
MOVEinfinity (andere Werte werden ignoriert)infinity
LOCK0, infinityinfinity
DELETEwird ignoriert (immer rekursiv)N/A

Beispiele

PROPFIND /collection/ HTTP/1.1
Host: example.com
Depth: 0

PROPFIND /collection/ HTTP/1.1
Host: example.com
Depth: 1

Server SOLLTEN Anfragen mit Depth: infinity auf Sammlungen (Collections) ablehnen, wenn dies zu einer übermäßigen Serverlast führen würde.

10.3 Destination Header

Der Destination-Header gibt die Ziel-URL (Destination URI) für COPY- oder MOVE-Operationen an.

Syntax

Destination: absoluteURI

Anforderungen

  • Pflichtfeld: COPY- und MOVE-Methoden MÜSSEN diesen Header enthalten
  • Absoluter URI: Der Wert MUSS ein vollständiger absoluter URI sein
  • Gleicher Server: In der Regel wird vorausgesetzt, dass Quelle und Ziel auf demselben Server liegen

Beispiele

COPY /source/file.txt HTTP/1.1
Host: example.com
Destination: http://example.com/destination/file.txt
Overwrite: T

MOVE /old-name.doc HTTP/1.1
Host: example.com
Destination: http://example.com/new-name.doc

Wenn der Destination-Header bei COPY oder MOVE fehlt, MUSS der Server mit 400 Bad Request antworten.

10.4 If Header

Der If-Header bietet einen Mechanismus zur bedingten Ausführung (Conditional Execution) von WebDAV-Methoden. Er dient sowohl zur Übermittlung von Sperr-Tokens (Lock Tokens) als auch zur Angabe von ETag-Bedingungen.

Syntax

Der If-Header kennt zwei Formen:

No-tag-list-Form (gilt für die Anfrage-URI):

If: (<locktoken>) (["etag"])

Tagged-list-Form (gilt für eine bestimmte Ressource):

If: <resource-url> (<locktoken>)

Verwendungszwecke

  1. Übermittlung von Sperr-Tokens – Nachweis, dass der Client eine Sperre hält
  2. Bedingte Anfragen – Bedingte Ausführung auf Basis von ETags
  3. Logische Verknüpfungen – Unterstützung von AND- und OR-Logik

Beispiele

Übermittlung eines Sperr-Tokens:

PUT /locked-resource HTTP/1.1
Host: example.com
If: (<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2>)
Content-Type: text/plain

Updated content

Mehrere Bedingungen:

DELETE /resource HTTP/1.1
Host: example.com
If: <http://example.com/resource>
(<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2>)
(["e0-b2-1a2"])

NOT-Bedingung:

If: (Not <urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2>)

Auswertungsregeln des If-Headers

  1. Sperr-Token-Abgleich – Prüft, ob das übermittelte Token mit der Ressourcensperre übereinstimmt
  2. ETag-Abgleich – Prüft, ob das Entity-Tag übereinstimmt
  3. Logische Auswertung – Auswertung von links nach rechts mit Kurzschlussauswertung (Short-Circuit Evaluation)

Anwendungsszenarien

Szenario 1: Gesperrte Ressource ändern

PUT /locked-doc HTTP/1.1
If: (<urn:uuid:lock-token-here>)

Szenario 2: COPY auf gesperrtes Ziel

COPY /source HTTP/1.1
Destination: http://example.com/locked-dest
If: <http://example.com/locked-dest>
(<urn:uuid:dest-lock-token>)

Szenario 3: Bedingte Aktualisierung

PUT /resource HTTP/1.1
If: (["etag-value"])

Wenn der If-Header vorhanden ist, MUSS der Server alle Bedingungen auswerten, bevor die Methode ausgeführt wird. Schlägt die Auswertung fehl, MUSS der Server mit 412 Precondition Failed antworten.

10.5 Lock-Token Header

Der Lock-Token-Header wird in der UNLOCK-Methode verwendet, um die zu entfernende Sperre (Lock) anzugeben.

Syntax

Lock-Token: <uri>

Verwendung

Ausschließlich für UNLOCK:

UNLOCK /resource HTTP/1.1
Host: example.com
Lock-Token: <urn:uuid:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7>

HTTP/1.1 204 No Content

Unterschied zum If-Header

  • Lock-Token: Wird ausschließlich bei UNLOCK verwendet, um die zu löschende Sperre anzugeben
  • If: Wird bei anderen Methoden verwendet, um Sperr-Tokens als Autorisierungsnachweis zu übermitteln

Der Lock-Token-Header MUSS bei UNLOCK-Anfragen vorhanden sein. Fehlt er, MUSS der Server mit 400 Bad Request antworten.

10.6 Overwrite Header

Der Overwrite-Header gibt an, ob eine COPY- oder MOVE-Operation die Zielressource überschreiben soll.

Syntax

Overwrite: T | F

Werte

  • T (True): Zielressource überschreiben (Standardwert)
  • F (False): Nicht überschreiben; schlägt fehl, wenn das Ziel bereits existiert

Verhalten

Overwrite: T:

  • Falls das Ziel existiert, wird es zunächst gelöscht
  • Anschließend wird die neue Ressource erstellt
  • Rückgabe: 204 No Content

Overwrite: F:

  • Falls das Ziel existiert, schlägt die Operation fehl
  • Rückgabe: 412 Precondition Failed
  • Keine Ressource wird verändert

Beispiele

COPY /source.txt HTTP/1.1
Host: example.com
Destination: http://example.com/dest.txt
Overwrite: F

HTTP/1.1 412 Precondition Failed
COPY /source.txt HTTP/1.1
Host: example.com
Destination: http://example.com/dest.txt
Overwrite: T

HTTP/1.1 204 No Content

Wenn der Overwrite-Header nicht angegeben wird, MUSS der Server das Verhalten von Overwrite: T annehmen.

10.7 Timeout Request Header

Der Timeout-Header wird in LOCK-Anfragen verwendet, um die gewünschte Sperr-Ablaufzeit (Lock Timeout) vorzuschlagen.

Syntax

Timeout: Second-<seconds> | Infinite

Beispiele

LOCK /resource HTTP/1.1
Host: example.com
Timeout: Second-3600

Timeout: Infinite

Timeout: Infinite, Second-604800, Second-86400

Serververhalten

  • Kann abweichen: Der Server KANN den Vorschlag des Clients ignorieren und einen anderen Wert wählen
  • Tatsächlichen Wert zurückgeben: Die Antwort MUSS den vom Server gewählten Timeout-Wert enthalten
  • Sicherheitsbeschränkungen: Der Server KANN die maximale Sperrdauer begrenzen

Timeout in der Antwort

<D:activelock>
<D:timeout>Second-3600</D:timeout>
...
</D:activelock>

Der Wert Infinite bedeutet, dass die Sperre nicht automatisch abläuft. Server SOLLTEN jedoch aus Sicherheitsgründen eine maximale Sperrdauer durchsetzen.


Schnellreferenz: HTTP-Header

HeaderVerwendete MethodenPflicht/OptionalBeschreibung
DAVOPTIONSAntwortUnterstützte Konformitätsstufen des Servers
DepthPROPFIND, COPY, LOCKOptionalTiefe der Operation
DestinationCOPY, MOVEPflichtZiel-URL
IfAlle MethodenOptionalBedingte Ausführung und Sperr-Token-Übermittlung
Lock-TokenUNLOCKPflichtZu entfernendes Sperr-Token
OverwriteCOPY, MOVEOptionalZiel überschreiben oder nicht
TimeoutLOCKOptionalVorgeschlagene Sperr-Ablaufzeit

Zusammenfassung: Kapitel 10 definiert die sieben spezialisierten HTTP-Header von WebDAV. Diese Header erweitern die Fähigkeiten von HTTP/1.1 und unterstützen Tiefenoperationen (Depth), Ressourcenoperationen (Destination, Overwrite), Sperrverwaltung (Lock-Token, Timeout) sowie bedingte Ausführung (If). Die korrekte Verwendung dieser Header ist für die Implementierung zuverlässiger WebDAV-Clients und -Server unerlässlich.