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
| Metodo | Supporto Depth | Valore predefinito |
|---|---|---|
| PROPFIND | 0, 1, infinity | infinity |
| COPY | 0, infinity | infinity |
| MOVE | infinity (gli altri valori sono ignorati) | infinity |
| LOCK | 0, infinity | infinity |
| DELETE | ignorato (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
- Invio di token di blocco: prova che il client possiede il blocco
- Richieste condizionali: esecuzione condizionale basata su ETag
- 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
- Corrispondenza del token di blocco: controlla che il token inviato corrisponda al blocco della risorsa
- Corrispondenza ETag: controlla che l'etichetta di entità corrisponda
- 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
| Intestazione | Metodi | Obbligatoria/facoltativa | Descrizione |
|---|---|---|---|
| DAV | OPTIONS | risposta | Livelli di funzionalità supportati dal server |
| Depth | PROPFIND, COPY, LOCK | facoltativa | Profondità dell'operazione |
| Destination | COPY, MOVE | obbligatoria | URL di destinazione |
| If | tutti i metodi | facoltativa | Esecuzione condizionale e invio di token di blocco |
| Lock-Token | UNLOCK | obbligatoria | Token del blocco da eliminare |
| Overwrite | COPY, MOVE | facoltativa | Indica se sovrascrivere la destinazione |
| Timeout | LOCK | facoltativa | Timeout 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.