Aller au contenu principal

10. En-têtes HTTP pour la création distribuée (HTTP Headers for Distributed Authoring)

WebDAV (Web Distributed Authoring and Versioning, création et gestion de versions distribuées sur le Web) définit plusieurs nouveaux en-têtes HTTP pour prendre en charge les fonctionnalités de création distribuée.

10.1 En-tête DAV (DAV Header)

L'en-tête DAV indique le niveau de fonctionnalités WebDAV pris en charge par le serveur.

Syntaxe

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

Niveaux de conformité

  • 1 : prise en charge WebDAV de base (PROPFIND, PROPPATCH, MKCOL, extensions GET/HEAD, extensions PUT, extensions DELETE, OPTIONS, COPY, MOVE)
  • 2 : inclut le niveau 1 + prise en charge de LOCK et UNLOCK
  • 3 : inclut le niveau 2 + prise en charge des collections ordonnées (optionnel)

Cas d'utilisation

Réponse OPTIONS :

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

10.2 En-tête Depth (Depth Header)

L'en-tête Depth est utilisé pour spécifier la profondeur à laquelle une opération DOIT s'appliquer dans la hiérarchie de ressources.

Syntaxe

Depth: 0 | 1 | infinity

Signification des valeurs

  • 0 : s'applique uniquement à la ressource cible elle-même
  • 1 : s'applique à la ressource et à ses membres directs
  • infinity : s'applique récursivement à la ressource et à tous ses descendants

Méthodes applicables

MéthodePrise en charge de DepthValeur par défaut
PROPFIND0, 1, infinityinfinity
COPY0, infinityinfinity
MOVEinfinity (les autres valeurs sont ignorées)infinity
LOCK0, infinityinfinity
DELETEignoré (toujours récursif)N/A

Exemple

<!-- Interroger uniquement les propriétés de la collection elle-même -->
PROPFIND /collection/ HTTP/1.1
Host: example.com
Depth: 0

<!-- Interroger la collection et ses membres directs -->
PROPFIND /collection/ HTTP/1.1
Host: example.com
Depth: 1

10.3 En-tête Destination (Destination Header)

L'en-tête Destination spécifie l'URL de destination pour les opérations COPY ou MOVE.

Syntaxe

Destination: absoluteURI

Exigences

  • Obligatoire : les méthodes COPY et MOVE DOIVENT inclure cet en-tête
  • URI absolu : DOIT être un URI absolu complet
  • Même serveur : la source et la destination sont généralement requises sur le même serveur

Exemple

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

10.4 En-tête If (If Header)

L'en-tête If fournit un mécanisme pour conditionner l'exécution des méthodes WebDAV, utilisé pour soumettre des jetons de verrou et des ETags.

Syntaxe

L'en-tête If a deux formes :

Forme No-tag-list :

If: (&lt;locktoken>) ([etag])

Forme Tagged-list :

If: &lt;resource-url> (&lt;locktoken>)

Usages

  1. Soumettre un jeton de verrou — prouver que le client détient le verrou
  2. Requête conditionnelle — exécution conditionnelle basée sur l'ETag
  3. Combinaison logique — prend en charge la logique ET et OU

Exemple

Soumettre un jeton de verrou :

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

Updated content

Conditions multiples :

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

Condition NOT :

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

Règles de correspondance de l'en-tête If

  1. Correspondance du jeton de verrou — vérifier si le jeton soumis correspond au verrou de la ressource
  2. Correspondance ETag — vérifier si l'étiquette d'entité correspond
  3. Évaluation logique — évaluation de gauche à droite, avec court-circuit

Cas d'utilisation

Cas 1 : Modifier une ressource verrouillée

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

Cas 2 : COPY vers une destination verrouillée

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

Cas 3 : Mise à jour conditionnelle

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

10.5 En-tête Lock-Token (Lock-Token Header)

L'en-tête Lock-Token est utilisé dans la méthode UNLOCK pour spécifier le verrou à supprimer.

Syntaxe

Lock-Token: &lt;uri>

Utilisation

Utilisé uniquement pour UNLOCK :

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

HTTP/1.1 204 No Content

Différence avec l'en-tête If

  • Lock-Token : utilisé uniquement pour UNLOCK, spécifie le verrou à supprimer
  • If : utilisé pour les autres méthodes, soumet le jeton de verrou pour prouver l'autorisation

10.6 En-tête Overwrite (Overwrite Header)

L'en-tête Overwrite spécifie si une opération COPY ou MOVE DOIT écraser la ressource de destination.

Syntaxe

Overwrite: T | F

Valeurs

  • T (True) : écraser la ressource de destination (par défaut)
  • F (False) : ne pas écraser ; échouer si la destination existe

Comportement

Overwrite: T :

  • Si la destination existe, la supprimer d'abord
  • Puis créer la nouvelle ressource
  • Retourner 204 No Content

Overwrite: F :

  • Si la destination existe, l'opération échoue
  • Retourner 412 Precondition Failed
  • Aucune ressource n'est modifiée

Exemple

<!-- Ne pas écraser le fichier existant -->
COPY /source.txt HTTP/1.1
Host: example.com
Destination: http://example.com/dest.txt
Overwrite: F

<!-- Si dest.txt existe -->
HTTP/1.1 412 Precondition Failed

<!-- Si dest.txt n'existe pas -->
HTTP/1.1 201 Created

10.7 En-tête Timeout de requête (Timeout Request Header)

L'en-tête Timeout est utilisé dans les requêtes LOCK pour suggérer un délai d'expiration du verrou.

Syntaxe

Timeout: Second-&lt;seconds> | Infinite

Exemple

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

<!-- Ou demander un délai d'expiration infini -->
Timeout: Infinite

<!-- Plusieurs valeurs de délai (par ordre de priorité) -->
Timeout: Infinite, Second-604800, Second-86400

Comportement du serveur

  • PEUT refuser : le serveur PEUT ignorer la suggestion du client
  • Retourner la valeur réelle : la réponse DOIT inclure le délai d'expiration choisi par le serveur
  • Limites de sécurité : le serveur PEUT limiter le délai d'expiration maximal

Timeout dans la réponse

&lt;D:activelock>
&lt;D:timeout>Second-3600&lt;D:timeout>
...
&lt;D:activelock>

Référence rapide des en-têtes HTTP

En-têteMéthodesObligatoire/OptionnelDescription
DAVOPTIONSRéponseNiveaux de fonctionnalités pris en charge par le serveur
DepthPROPFIND, COPY, LOCKOptionnelProfondeur de l'opération
DestinationCOPY, MOVEObligatoireURL de destination
IfToutes méthodesOptionnelExécution conditionnelle et soumission de jeton de verrou
Lock-TokenUNLOCKObligatoireJeton de verrou à supprimer
OverwriteCOPY, MOVEOptionnelÉcraser ou non la destination
TimeoutLOCKOptionnelDélai d'expiration suggéré du verrou

Résumé du chapitre : Le chapitre 10 définit les 7 en-têtes HTTP spécialisés de WebDAV. Ces en-têtes étendent les capacités d'HTTP/1.1 pour prendre en charge les opérations en profondeur (Depth), les opérations sur les ressources (Destination, Overwrite), la gestion des verrous (Lock-Token, Timeout) et l'exécution conditionnelle (If). L'utilisation correcte de ces en-têtes est essentielle pour implémenter des clients et serveurs WebDAV fiables.