PROPFIND
Metoda HTTP
Specyfikacja metody HTTP PROPFIND
Metoda PROPFIND pobiera właściwości zdefiniowane na zasobie zidentyfikowanym przez Request-URI, jeśli zasób nie ma żadnych wewnętrznych członków, lub na zasobie zidentyfikowanym przez Request-URI i potencjalnie jego zasobach członkowskich, jeśli zasób jest kolekcją, która ma wewnętrzne adresy URL członków. Wszystkie zasoby zgodne z DAV MUSZĄ obsługiwać metodę PROPFIND i element XML propfind
(sekcja 14.20) wraz ze wszystkimi elementami XML zdefiniowanymi do użycia z tym elementem.
Klient MUSI przesłać nagłówek Depth z wartością "0", "1" lub "nieskończoność" z żądaniem PROPFIND. Serwery MUSZĄ obsługiwać żądania głębokości "0" i "1" na zasobach zgodnych z WebDAV i POWINNY obsługiwać żądania "nieskończoności". W praktyce obsługa żądań o nieskończonej głębokości MOŻE być wyłączona ze względu na obawy dotyczące wydajności i bezpieczeństwa związane z tym zachowaniem. Serwery POWINNY traktować żądanie bez nagłówka Depth tak, jakby nagłówek Depth: infinity
był zawarty.
Klient może przesłać element propfind
XML w treści metody żądania opisujący, jakie informacje są wymagane. Możliwe jest:
- Zażądać konkretnych wartości właściwości, poprzez nazwanie żądanych właściwości w ramach elementu
prop
(kolejność właściwości w tym miejscu MOŻE zostać zignorowana przez serwer), - Zażądać wartości właściwości dla tych właściwości zdefiniowanych w niniejszej specyfikacji (co najmniej) plus właściwości martwe, za pomocą elementu
allprop
(elementinclude
może być użyty zallprop
, aby poinstruować serwer, aby również zawierał dodatkowe właściwości, które mogły nie zostać zwrócone w inny sposób), - Zażądaj listy nazw wszystkich właściwości zdefiniowanych w zasobie, używając elementu
propname
.
Klient może nie przesyłać treści żądania. Pusta treść żądania PROPFIND MUSI być traktowana tak, jakby była żądaniem allprop
.
Uwaga, że allprop
nie zwraca wartości dla wszystkich aktywnych właściwości. Serwery WebDAV coraz częściej mają kosztownie obliczane lub długie właściwości (patrz [RFC3253] i [RFC3744]) i nie zwracają już wszystkich właściwości. Zamiast tego klienci WebDAV mogą używać żądań propname
, aby odkryć, jakie właściwości istnieją, i żądać nazwanych właściwości podczas pobierania wartości. W przypadku właściwości aktywnej zdefiniowanej w innym miejscu, definicja ta może określać, czy ta właściwość aktywna będzie zwracana w żądaniach allprop
.
Wszystkie serwery MUSZĄ obsługiwać zwracanie odpowiedzi typu zawartości text/xml
lub application/xml
, która zawiera element multistatus
XML, który opisuje wyniki prób pobrania różnych właściwości.
Jeśli wystąpi błąd pobierania właściwości, wówczas odpowiedni wynik błędu MUSI być zawarty w odpowiedzi. Żądanie pobrania wartości właściwości, która nie istnieje, jest błędem i MUSI zostać odnotowane za pomocą elementu response
XML, który zawiera wartość statusu 404 (Not Found).
W konsekwencji, element multistatus
XML dla zasobu kolekcji MUSI zawierać element response
XML dla każdego adresu URL członka kolekcji, do dowolnej głębokości. NIE POWINIEN zawierać żadnych elementów response
dla zasobów, które nie są zgodne z WebDAV. Każdy element response
MUSI zawierać element href
, który zawiera adres URL zasobu, na którym zdefiniowane są właściwości w elemencie XML prop
. Wyniki dla PROPFIND na zasobie kolekcji są zwracane jako płaska lista, której kolejność wpisów nie jest istotna. Należy pamiętać, że zasób może mieć tylko jedną wartość dla właściwości o danej nazwie, więc właściwość może pojawić się tylko raz w odpowiedziach PROPFIND.
Właściwości mogą podlegać kontroli dostępu. W przypadku żądań allprop
i propname
, jeśli zleceniodawca nie ma prawa wiedzieć, czy dana właściwość istnieje, wówczas właściwość MOŻE zostać po cichu wykluczona z odpowiedzi.
Niektóre wyniki PROPFIND MOGĄ być buforowane, z zachowaniem ostrożności, ponieważ nie ma mechanizmu sprawdzania poprawności pamięci podręcznej dla większości właściwości. Ta metoda jest zarówno bezpieczna, jak i idempotentna (patrz sekcja 9.1 [RFC2616]).
Opis metody PROPFIND
Przykład dla metody 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