Passa al contenuto principale

10. HTTP Headers for Distributed Authoring (Intestazioni HTTP per la creazione distribuita)

WebDAV definisce diverse intestazioni HTTP nuove per supportare le funzionalità di creazione distribuita.

10.1 DAV Header (Intestazione DAV)

L'intestazione DAV indica i livelli di funzionalità WebDAV supportati dal server.

Sintassi

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

Livelli di conformità

  • 1: supporto WebDAV di base (PROPFIND, PROPPATCH, MKCOL, estensioni GET/HEAD, estensioni PUT, estensioni DELETE, OPTIONS, COPY, MOVE)
  • 2: livello 1 più supporto LOCK e UNLOCK
  • 3: livello 2 più supporto per collezioni ordinate (facoltativo)

Scenari d'uso

Risposta 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 Depth Header (Intestazione Depth)

L'intestazione Depth specifica la profondità della gerarchia di risorse a cui deve essere applicata l'operazione.

Sintassi

Depth: 0 | 1 | infinity

Significato dei valori

  • 0: applicata solo alla risorsa di destinazione
  • 1: applicata alla risorsa e ai suoi membri diretti
  • infinity: applicata ricorsivamente alla risorsa e a tutti i discendenti

Metodi applicabili

MetodoSupporto DepthValore predefinito
PROPFIND0, 1, infinityinfinity
COPY0, infinityinfinity
MOVEinfinity (gli altri valori sono ignorati)infinity
LOCK0, infinityinfinity
DELETEignorato (sempre ricorsivo)N/A

Esempi

<!-- Interroga solo le proprietà della collezione stessa -->
PROPFIND /collection/ HTTP/1.1
Host: example.com
Depth: 0

<!-- Interroga la collezione e i suoi membri diretti -->
PROPFIND /collection/ HTTP/1.1
Host: example.com
Depth: 1

10.3 Destination Header (Intestazione Destination)

L'intestazione Destination specifica l'URL di destinazione per le operazioni COPY o MOVE.

Sintassi

Destination: absoluteURI

Requisiti

  • Obbligatoria: i metodi COPY e MOVE devono includere questa intestazione
  • URI assoluto: deve essere un URI assoluto completo
  • Stesso server: in genere sorgente e destinazione devono trovarsi sullo stesso server

Esempi

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 If Header (Intestazione If)

L'intestazione If fornisce un meccanismo per eseguire condizionalmente metodi WebDAV, inviando token di blocco ed ETag.

Sintassi

L'intestazione If ha due forme:

Forma no-tag-list:

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

Forma tagged-list:

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

Usi

  1. Invio di token di blocco: prova che il client possiede il blocco
  2. Richieste condizionali: esecuzione condizionale basata su ETag
  3. Combinazione logica: supporto della logica AND e OR

Esempi

Invio di token di blocco:

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

Updated content

Condizioni multiple:

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

Condizione NOT:

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

Regole di corrispondenza dell'intestazione If

  1. Corrispondenza del token di blocco: controlla che il token inviato corrisponda al blocco della risorsa
  2. Corrispondenza ETag: controlla che l'etichetta di entità corrisponda
  3. Valutazione logica: valuta da sinistra a destra, con supporto di short-circuit

Scenari d'uso

Scenario 1: modifica di una risorsa bloccata

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

Scenario 2: COPY verso una destinazione bloccata

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

Scenario 3: aggiornamento condizionale

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

10.5 Lock-Token Header (Intestazione Lock-Token)

L'intestazione Lock-Token è usata nel metodo UNLOCK per specificare il blocco da rimuovere.

Sintassi

Lock-Token: <uri>

Uso

Solo per UNLOCK:

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

HTTP/1.1 204 No Content

Differenza rispetto all'intestazione If

  • Lock-Token: usata solo per UNLOCK, specifica il blocco da eliminare
  • If: usata da altri metodi, invia token di blocco per dimostrare l'autorizzazione

10.6 Overwrite Header (Intestazione Overwrite)

L'intestazione Overwrite specifica se un'operazione COPY o MOVE deve sovrascrivere la risorsa di destinazione.

Sintassi

Overwrite: T | F

Valori

  • T (True): sovrascrive la risorsa di destinazione (valore predefinito)
  • F (False): non sovrascrive; se la destinazione esiste, l'operazione fallisce

Comportamento

Overwrite: T:

  • Se la destinazione esiste, viene prima eliminata
  • Poi viene creata la nuova risorsa
  • Viene restituito 204 No Content

Overwrite: F:

  • Se la destinazione esiste, l'operazione fallisce
  • Viene restituito 412 Precondition Failed
  • Nessuna risorsa viene modificata

Esempio

<!-- Non sovrascrive un file esistente -->
COPY /source.txt HTTP/1.1
Host: example.com
Destination: http://example.com/dest.txt
Overwrite: F

<!-- Se dest.txt esiste -->
HTTP/1.1 412 Precondition Failed

<!-- Se dest.txt non esiste -->
HTTP/1.1 201 Created

10.7 Timeout Request Header (Intestazione di richiesta Timeout)

L'intestazione Timeout è usata nelle richieste LOCK per suggerire la durata del blocco.

Sintassi

Timeout: Second-<seconds> | Infinite

Esempi

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

<!-- Oppure richiede un timeout infinito -->
Timeout: Infinite

<!-- Più valori di timeout, in ordine di preferenza -->
Timeout: Infinite, Second-604800, Second-86400

Comportamento del server

  • Può rifiutare: il server può ignorare il suggerimento del client
  • Restituisce il valore effettivo: la risposta deve includere il timeout scelto dal server
  • Limiti di sicurezza: il server può imporre una durata massima del timeout

Timeout nella risposta

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

Riferimento rapido alle intestazioni HTTP

IntestazioneMetodiObbligatoria/facoltativaDescrizione
DAVOPTIONSrispostaLivelli di funzionalità supportati dal server
DepthPROPFIND, COPY, LOCKfacoltativaProfondità dell'operazione
DestinationCOPY, MOVEobbligatoriaURL di destinazione
Iftutti i metodifacoltativaEsecuzione condizionale e invio di token di blocco
Lock-TokenUNLOCKobbligatoriaToken del blocco da eliminare
OverwriteCOPY, MOVEfacoltativaIndica se sovrascrivere la destinazione
TimeoutLOCKfacoltativaTimeout suggerito per il blocco

Sintesi del capitolo: il Capitolo 10 definisce sette intestazioni HTTP specifiche di WebDAV. Queste intestazioni estendono le capacità di HTTP/1.1 e supportano operazioni in profondità (Depth), operazioni sulle risorse (Destination, Overwrite), gestione dei blocchi (Lock-Token, Timeout) ed esecuzione condizionale (If). Il loro uso corretto è essenziale per implementare client e server WebDAV affidabili.