PROPFIND

HTTP метод

Спецификация на HTTP метод PROPFIND

Методът PROPFIND извлича свойства, определени за ресурса, идентифициран от Request-URI, ако ресурсът няма вътрешни членове, или за ресурса, идентифициран от Request-URI, и потенциално за ресурсите, които са негови членове, ако ресурсът е колекция, която има вътрешни URL адреси на членовете. Всички DAV-съвместими ресурси ТРЯБВА да поддържат метода PROPFIND и XML елемента propfind (раздел 14.20) заедно с всички XML елементи, определени за използване с този елемент.

Клиентът ТРЯБВА да изпрати заглавие Depth със стойност "0", "1" или "безкрайност" със заявка PROPFIND. Сървърите ТРЯБВА да поддържат заявки за дълбочина "0" и "1" за ресурси, съвместими с WebDAV, и ТРЯБВА да поддържат заявки за "безкрайност". На практика поддръжката на заявките за безкрайна дълбочина МОЖЕ да бъде изключена поради свързаните с това поведение проблеми, свързани с производителността и сигурността. Сървърите ТРЯБВА да третират заявка без заглавие Depth (Дълбочина) така, сякаш е включено заглавие Depth: infinity.

Клиентът може да подаде XML елемент propfind в тялото на метода на заявката, описващ каква информация се иска. Възможно е:

  • Изискване на конкретни стойности на свойствата, като се назоват желаните свойства в елемента prop (подредбата на свойствата тук МОЖЕ да се игнорира от сървъра),
  • Изискване на стойности на свойствата за тези свойства, определени в тази спецификация (като минимум), плюс мъртви свойства, като се използва елементът allprop (елементът include може да се използва с allprop, за да се инструктира сървърът да включи и допълнителни живи свойства, които може да не бъдат върнати по друг начин),
  • Заявете списък с имената на всички свойства, дефинирани в ресурса, като се използва елементът propname.

Клиентът може да избере да не подава тяло на заявката. Празното тяло на заявка PROPFIND ТРЯБВА да се третира като заявка allprop.

Забележете, че allprop не връща стойности за всички живи свойства. WebDAV сървърите все по-често имат скъпо изчислени или дълги свойства (вж. [RFC3253] и [RFC3744]) и вече не връщат всички свойства. Вместо това клиентите на WebDAV могат да използват заявки propname, за да открият какви свойства съществуват в реално време, и да заявят назованите свойства при извличане на стойности. За живо свойство, дефинирано другаде, тази дефиниция може да определи дали това живо свойство ще бъде върнато в allprop заявки.

Всички сървъри ТРЯБВА да поддържат връщане на отговор от тип съдържание text/xml или application/xml, който съдържа XML елемент multistatus, описващ резултатите от опитите за извличане на различните свойства.

Ако има грешка при извличането на дадено свойство, в отговора ТРЯБВА да бъде включен подходящ резултат за грешка. Заявка за извличане на стойност на свойство, което не съществува, е грешка и ТРЯБВА да бъде отбелязана с XML елемент response, който съдържа стойност на състоянието 404 (Not Found).

Впоследствие XML елементът multistatus за ресурс на колекция ТРЯБВА да включва XML елемент response за всеки URL адрес на член на колекцията, независимо от дълбочината, която е била поискана. Той НЕ ТРЯБВА да включва никакви елементи response за ресурси, които не са съвместими с WebDAV. Всеки елемент response ТРЯБВА да съдържа елемент href, който съдържа URL адреса на ресурса, за който са дефинирани свойствата в XML елемента prop. Резултатите от PROPFIND на ресурс от колекция се връщат като плосък списък, чийто ред на записите не е от значение. Имайте предвид, че даден ресурс може да има само една стойност за свойство с дадено име, така че свойството може да се появи само веднъж в отговорите на PROPFIND.

Свойствата могат да бъдат обект на контрол на достъпа. В случая на заявките allprop и propname, ако възложителят няма право да знае дали съществува дадено свойство, то това свойство МОЖЕ да бъде изключено безшумно от отговора.

Някои резултати от PROPFIND МОГАТ да бъдат кеширани, но с повишено внимание, тъй като за повечето свойства няма механизъм за проверка на кеша. Този метод е едновременно безопасен и идентичен (вж. раздел 9.1 на [RFC2616]).

HTTP метод PROPFIND е специфициран в раздел 9.1 на документ RFC 4918 от Internet Engineering Task Force (IETF) и World Wide Web Consortium (W3C).

Описание на метода PROPFIND

текуща работа

Пример за 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