PROPFIND

Метод HTTP

Специфікація HTTP-методу PROPFIND

Метод PROPFIND повертає властивості, визначені в ресурсі, ідентифікованому за запитом-URI, якщо ресурс не має внутрішніх членів, або в ресурсі, ідентифікованому за запитом-URI, і потенційно його ресурсах-членах, якщо ресурс є колекцією, яка має внутрішні URL-адреси членів. Усі DAV-сумісні ресурси ПОВИННІ підтримувати метод PROPFIND і елемент XML propfind (Розділ 14.20) разом з усіма елементами XML, визначеними для використання з цим елементом.

Клієнт ПОВИНЕН надсилати заголовок Depth зі значенням "0", "1" або "нескінченність" разом із запитом PROPFIND. Сервери ПОВИННІ підтримувати запити глибини "0" і "1" на WebDAV-сумісних ресурсах і ПОВИННІ підтримувати запити "нескінченність". На практиці підтримка запитів нескінченної глибини МОЖЕ бути відключена через проблеми з продуктивністю і безпекою, пов'язані з такою поведінкою. Сервери ПОВИННІ обробляти запит без заголовка Depth так, ніби до нього включено заголовок Depth: infinity.

Клієнт може подати елемент propfind XML у тілі методу запиту, що описує інформацію, яка запитується. Це можливо:

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

Клієнт може не надсилати тіло запиту. Порожнє тіло запиту PROPFIND ПОВИННО розглядатися так, як якщо б це був запит allprop.

Зверніть увагу, що allprop повертає значення не для всіх реальних властивостей. Сервери WebDAV дедалі частіше мають дороговартісні або довгі властивості (див. [RFC3253] і [RFC3744]) і вже не повертають всі властивості. Натомість, клієнти WebDAV можуть використовувати запити propname, щоб дізнатися, які живі властивості існують, і запитувати іменовані властивості при отриманні значень. Для живих властивостей, визначених деінде, у цьому визначенні можна вказати, чи повертатиметься ця жива властивість у запитах allprop.

Усі сервери ПОВИННІ підтримувати повернення відповіді з типом вмісту text/xml або application/xml, яка містить multistatus XML-елемент, що описує результати спроб отримати різні властивості.

Якщо при отриманні властивості сталася помилка, то відповідний результат помилки ПОВИНЕН бути включений у відповідь. Запит на отримання значення властивості, якої не існує, є помилкою і ПОВИНЕН бути позначений елементом відповідь XML, який містить значення статусу 404 (Не знайдено).

Відповідно, елемент мультистатус XML для ресурсу колекції ПОВИНЕН включати елемент відповідь XML для кожної URL-адреси члена колекції, незалежно від того, на яку глибину запиту було зроблено запит. Він НЕ ПОВИНЕН містити жодних елементів відповідь для ресурсів, які не є сумісними з WebDAV. Кожен елемент response ПОВИНЕН містити елемент href, який містить URL-адресу ресурсу, для якого визначено властивості в XML-елементі prop. Результати пошуку PROPFIND на ресурсі колекції повертаються у вигляді плаского списку, порядок елементів якого не має значення. Зауважте, що ресурс може мати лише одне значення для властивості з даним іменем, тому властивість може з'являтися у відповідях PROPFIND лише один раз.

Властивості можуть бути об'єктом управління доступом. У випадку запитів allprop і propname, якщо принципал не має права знати, чи існує певна властивість, то властивість МОЖЕ бути мовчки виключена з відповіді.

Деякі результати PROPFIND МОЖНА кешувати, з обережністю, оскільки для більшості властивостей не існує механізму перевірки кешу. Цей метод є безпечним і недієвим (див. розділ 9.1 [RFC2616]).

Метод HTTP PROPFIND визначено в розділі 9.1 документа RFC 4918 Робочої групи з розробки Інтернету (IETF) і Консорціуму всесвітньої павутини (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