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]).
Описание на метода PROPFIND
Пример за 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