PROPFIND

Metoda HTTP

Specifikace metody HTTP PROPFIND

Metoda PROPFIND načte vlastnosti definované na prostředku identifikovaném pomocí Request-URI, pokud prostředek nemá žádné vnitřní členy, nebo na prostředku identifikovaném pomocí Request-URI a případně jeho členských prostředcích, pokud je prostředek kolekcí, která má vnitřní členské adresy URL. Všechny prostředky kompatibilní s DAV MUSÍ podporovat metodu PROPFIND a element XML propfind (oddíl 14.20) spolu se všemi elementy XML definovanými pro použití s tímto elementem.

Klient MUSÍ s požadavkem PROPFIND odeslat hlavičku Depth s hodnotou "0", "1" nebo "nekonečno". Servery MUSÍ podporovat požadavky na hloubku "0" a "1" u zdrojů kompatibilních s WebDAV a MUSÍ podporovat požadavky na "nekonečno". V praxi MŮŽE být podpora požadavků s nekonečnou hloubkou vypnuta kvůli obavám o výkon a bezpečnost spojeným s tímto chováním. Servery MUSÍ s požadavkem bez hlavičky Depth zacházet, jako by byla obsažena hlavička Depth: infinity.

Klient může v těle metody požadavku odeslat element propfind XML popisující, jaké informace jsou požadovány. Je to možné:

  • požadovat konkrétní hodnoty vlastností, a to tak, že požadované vlastnosti pojmenuje v rámci elementu prop (pořadí vlastností zde MŮŽE být serverem ignorováno),
  • požadovat hodnoty vlastností definovaných v této specifikaci (minimálně) plus mrtvé vlastnosti, pomocí prvku allprop (prvek include lze použít spolu s prvkem allprop a dát tak serveru pokyn, aby zahrnul i další živé vlastnosti, které by jinak nemusely být vráceny),
  • vyžádat si seznam názvů všech vlastností definovaných na prostředku pomocí prvku propname.

Klient se může rozhodnout, že tělo požadavku nepředloží. S prázdným tělem požadavku PROPFIND MUSÍ být zacházeno, jako by se jednalo o požadavek allprop.

Všimněte si, že allprop nevrací hodnoty všech živých vlastností. Servery WebDAV mají stále častěji draze vypočítané nebo dlouhé vlastnosti (viz [RFC3253] a [RFC3744]) a nevracejí již všechny vlastnosti. Místo toho mohou klienti WebDAV pomocí požadavků propname zjistit, jaké živé vlastnosti existují, a při získávání hodnot si vyžádat pojmenované vlastnosti. Pro živou vlastnost definovanou jinde může tato definice určit, zda bude tato živá vlastnost vrácena v požadavcích allprop.

Všechny servery MUSÍ podporovat vracení odpovědi typu obsahu text/xml nebo application/xml, která obsahuje element multistatus XML, který popisuje výsledky pokusů o získání různých vlastností.

Pokud dojde k chybě při získávání vlastnosti, pak musí být v odpovědi uveden příslušný výsledek chyby. Požadavek na načtení hodnoty neexistující vlastnosti je chybou a MUSÍ být zaznamenán pomocí elementu response XML, který obsahuje hodnotu stavu 404 (Not Found).

Podle toho element multistatus XML pro zdroj kolekce MUSÍ obsahovat element response XML pro každou členskou adresu URL kolekce, ať už byla požadována do jakékoliv hloubky. NEMUSÍ obsahovat žádné prvky response pro zdroje, které nejsou kompatibilní s WebDAV. Každý prvek response MUSÍ obsahovat prvek href, který obsahuje adresu URL zdroje, na níž jsou definovány vlastnosti v prvku prop XML. Výsledky PROPFIND na prostředku kolekce jsou vráceny jako plochý seznam, jehož pořadí položek není důležité. Všimněte si, že prostředek může mít pouze jednu hodnotu pro vlastnost daného jména, takže se vlastnost může v odpovědích PROPFIND zobrazit pouze jednou.

Vlastnosti mohou podléhat řízení přístupu. V případě požadavků allprop a propname, pokud zadavatel nemá právo vědět, zda daná vlastnost existuje, MŮŽE být vlastnost z odpovědi tiše vyloučena.

Některé výsledky PROPFIND MŮŽOU být uloženy do mezipaměti, avšak s opatrností, protože pro většinu vlastností neexistuje žádný mechanismus ověřování mezipaměti. Tato metoda je bezpečná a idempotentní (viz část 9.1 [RFC2616]).

Metoda HTTP PROPFIND byla specifikována v části 9.1 dokumentu RFC 4918 organizací IETF (Internet Engineering Task Force) a konsorciem W3C (World Wide Web Consortium).

Popis metody PROPFIND

probíhající práce

Příklad pro metodu HTTP PROPFIND

Request header:
PROPFIND /data HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/58.0.3029.110 Safari/537
Depth: 1
Content-Type: text/xml; charset="utf-8"
Accept-Language: de-DE,de;q=0.5
Connection: keep-alive
Response header:
HTTP/1.1 207 Multi-Status
Content-Type: text/xml; charset="utf-8"
Content-Length: 453
Date: Mon, 31 July 2023 14:58:12 GMT
Server: Apache/2.4.7 (Ubuntu)
Cache-Control: no-cache