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 рабочей группой по проектированию Интернета (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