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 (element include może być użyty z allprop, 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]).

Metoda HTTP PROPFIND została określona w sekcji 9.1 dokumentu RFC 4918 przez Internet Engineering Task Force (IETF) i World Wide Web Consortium (W3C).

Opis metody PROPFIND

prace w toku

Przykład dla metody 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