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
(prvekinclude
lze použít spolu s prvkemallprop
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]).
Popis metody PROPFIND
Příklad pro metodu HTTP PROPFIND
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
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