V předcházejícím článku jsme se seznámili se základy technologie WebDAV. Tentokrát se zaměříme na to, jakým způsobem spolu klient a server komunikují. Nejde o nic nového, pouze spojíme znalosti z oblasti XML a HTTP. Obsah článku bude důležitý proto, abychom pochopili, jakým způsobem příkazy používat.

Pro ilustraci si ukážeme jednoduchý příklad, ze kterého budeme vycházet.

Dotaz klienta

Nejdříve se zaměříme na dotaz klienta. V první části specifikuje kient použitý HTTP příkaz (PROPFIND) spolu se zdrojem (/index.html) a použitou verzí protokolu HTTP (HTTP/1.1). Následují HTTP hlavičky Host, Content-Type a Content-Length. Některé příkazy WebDAVu mohou být ovlivněny odeslanou hlavičkou (například hlavička Destination u příkazu COPY), a proto je nutné dát pozor na to, jaké hlavičky byly odeslány. Příkaz PROPFIND říká serveru, že jeho úkolem bude zjistit vlastnosti připojené k souboru index.html. Pokud bychom odeslali pouze tuto první část, pak by server nevěděl jaké vlastnosti má hledat, zda má v odeslat jejich hodnoty nebo pouze jejich názvy. Proto je nutné k dotazu připojit také XML dokument.

Nemusím asi připomínat, že XML dokument musí být správně strukturovaný (well-formed), jinak server dotaz nezpracuje. Konkrétně vrátí stavový kód 400 (Bad Request) – špatný dotaz. Dále bych rád upozornil, že ne vždy je XML část dotazu nutná. Například, když budeme chtít smazat zdroj (pomocí příkazu DELETE), není nutné nějaký XML dokument připojit. V tomto případě by nám vystačily příkazy a hlavičky HTTP.

XML

Nyní již k samotnému XML dokumentu. Ten se v první řadě skládá z deklarace XML a určení kódování. Následují elementy, které odpovídají použitému HTTP příkazu. V kořenovém elementu musí být definován jmenný prostor WebDAVu. Pokud používáme vlastní elementy, pak je nutné definovat pro ně vlastní jmenný prostor. WebDAV nekontroluje ani existenci vámi určeného DTD ani správnost použití elementů, proto můžete při zkoušení používat fiktivní adresu DTD.

V našem příkladě je jako kořenový element použit element propfind. Obsah elementu (respektive jeho potomek) říká serveru, jaké vlastnosti má načíst a vrátit v odpovědi. Protože potomkem je element propname, vrátí server pouze názvy vlastností připojených k souboru index.html (více o příkazu PROPFIND a příslušných elementech najdete v příštím článku).

Odpověď serveru

Odpověď serveru začíná opět jako standardní odpověď po HTTP dotazu: protokol stavový kód stavové hlášení.

Velmi často se při použití WebDAVu setkáme se stavovým kódem 207 (Multi-Status). Jak už název napovídá, jedná se o stav, kdy se při zpracování dotazu klienta vyskytlo několik stavových kódů, které jsou určeny v připojeném XML dokumentu.

Představme si případ, že se snažíme přesunout kolekci pomocí příkazu MOVE. Z několika souborů, které kolekce obsahuje, je jeden zamknutý. Webový server přesune všechny soubory až na tento zamknutý soubor. Server nám musí dát nějakým způsobem vědět, že všechny soubory kromě tohoto byly přesunuty. Odpověď tudíž musí obsahovat několik stavových kódů, které budou mít hodnotu 204 (No Content – tato hodnota nám říká, že přesunutí proběhlo v pořádku) a jeden stavový kód, který bude mít hodnotu 423 (Locked). Jednotlivé stavové kódy lze vyčíst z hodnoty elementu status. (V některém z příštích článků se krátce zmíníme o stavových kódech, ale pokud vás tato problematika zajímá, doporučuji prostudovat specifikaci WebDAVu a protokolu HTTP.)

Budeme pokračovat v analýze XML části zaslané odpovědi. Kořenovým elementem odpovědi serveru je element multistatus. Ten může obsahovat několik elementů response (odpověď), které již obsahují informace o jednotlivých souborech, jenž byly klientovým příkazem ovlivněny. Obvykle bývá v rámci jednoho elementu response jeden element status.

Výsledkem dotazu v našem případě je obsah elementu prop, který nám říká, jaké vlastnosti jsou k souboru index.html připojeny.

V následující tabulce najdete seznam a popis základních elementů, které WebDAV používá pro popis odpovědi:

Element Popis
multistatus kořenový element XML dokumentu v případě, že operace vyvolá více než jeden stavový kód
response element obsahující výsledek volané metody pro jeden zdroj
responsedescription element obsahující popis odpovědi
href element obsahující URI zdroje (musí být potomkem elementu response)
status stavový kód vyvolaný příkazem WebDAV

WebDAV používá přes třicet elementů, ale o většině z nich se zmíníme při popisu jednotlivých příkazů.

Na závěr tohoto článku si ukážeme, jaké příkazy můžeme s WebDAVem používat. Použití jednotlivých příkazů pak bude náplní několika příštích článků.

Příkaz Popis
PROPFIND výpis vlastností (hodnot nebo jen názvů)
PROPPATCH změna, odebrání, připojení nové vlastnosti
MKCOL vytvoření nové kolekce
COPY kopírování souboru/kolekce
MOVE přesunutí souboru/kolekce
LOCK uzamčení souboru/kolekce
UNLOCK zrušení zámku souboru/kolekce
DELETE smazání souboru/kolekce

Odkazy, zdroje

Žádný příspěvek v diskuzi

Odpovědět