Открыть сервис

PROPFIND

PROPFIND — это метод протокола HTTP, расширяющий его функциональность для работы с WebDAV (Web Distributed Authoring and Versioning). Он используется для запроса свойств (метаданных) ресурса, расположенного по определённому URI, а также для поиска ресурсов, соответствующих заданным критериям. В отличие от стандартного GET-запроса, который возвращает содержимое ресурса, PROPFIND возвращает информацию о нём: дату создания, размер, тип, права доступа, автора и другие свойства, определённые в пространстве имён WebDAV.

История

Метод PROPFIND был впервые определён в 1999 году в спецификации RFC 2518 «HTTP Extensions for Distributed Authoring — WEBDAV», разработанной рабочей группой IETF (Internet Engineering Task Force). Основной целью создания WebDAV было расширение HTTP для поддержки коллективной работы с документами на удалённых серверах, включая возможность блокировки, версионирования и управления свойствами. PROPFIND стал ключевым инструментом для получения метаданных, необходимых для навигации по файловым структурам и управления ими.

В 2007 году спецификация была обновлена в RFC 4918, где уточнялись детали реализации и исправлялись ошибки. PROPFIND остаётся обязательным методом для всех реализаций WebDAV и поддерживается большинством веб-серверов (Apache, Nginx, IIS) и клиентских приложений (например, файловые менеджеры Windows, macOS Finder, браузеры с поддержкой WebDAV).

Синтаксис и структура запроса

Запрос PROPFIND отправляется на URI ресурса или коллекции (например, каталога). Он может содержать тело в формате XML, в котором указывается, какие именно свойства запрашиваются. Если тело запроса отсутствует, сервер по умолчанию возвращает все известные свойства, кроме тех, что требуют дополнительных затрат на вычисление (например, размер каталога).

Пример запроса

``` PROPFIND /folder/ HTTP/1.1 Host: example.com Depth: 1 Content-Type: application/xml; charset="utf-8" Content-Length: 150

<?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:prop> <D:creationdate/> <D:getcontentlength/> <D:displayname/> </D:prop> </D:propfind> ```

Заголовок Depth

Заголовок Depth определяет, насколько глубоко сервер должен обрабатывать запрос. Возможные значения:

  • 0 — только сам ресурс (без дочерних элементов).
  • 1 — ресурс и его непосредственные дочерние элементы (для коллекций).
  • infinity — рекурсивный обход всех вложенных ресурсов. Используется редко, так как может привести к высокой нагрузке на сервер.

Структура ответа

Ответ сервера на PROPFIND содержит код состояния HTTP (обычно 207 Multi-Status) и тело в формате XML, в котором перечислены все запрошенные ресурсы с их свойствами. Каждый ресурс представлен элементом <response>, содержащим <href> (URI) и <propstat> (статус свойств).

Пример ответа

``` HTTP/1.1 207 Multi-Status Content-Type: application/xml; charset="utf-8"

<?xml version="1.0" encoding="utf-8" ?> <D:multistatus xmlns:D="DAV:"> <D:response> <D:href>/folder/</D:href> <D:propstat> <D:prop> <D:creationdate>2023-01-15T10:30:00Z</D:creationdate> <D:getcontentlength>0</D:getcontentlength> <D:displayname>folder</D:displayname> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> <D:response> <D:href>/folder/file.txt</D:href> <D:propstat> <D:prop> <D:creationdate>2023-01-15T11:00:00Z</D:creationdate> <D:getcontentlength>1024</D:getcontentlength> <D:displayname>file.txt</D:displayname> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> </D:multistatus> ```

Классификация свойств

Свойства, возвращаемые PROPFIND, делятся на две категории:

  • Живые свойства (live properties): вычисляются сервером динамически. Например, getcontentlength (размер файла), creationdate (дата создания), getlastmodified (дата последнего изменения). Их значения не могут быть изменены напрямую через PROPPATCH.
  • Мёртвые свойства (dead properties): хранятся как часть метаданных ресурса и могут быть изменены клиентом. Например, displayname (отображаемое имя), авторские комментарии, пользовательские теги. Они не влияют на поведение сервера.

Применение

Файловые менеджеры и облачные хранилища

PROPFIND широко используется в клиентских приложениях для отображения содержимого удалённых каталогов. Например, при подключении к WebDAV-серверу через проводник Windows (сетевой диск) или через сторонние утилиты (Cyberduck, WinSCP) именно PROPFIND запрашивает список файлов и их свойства. Это позволяет пользователю видеть размер, дату изменения и другие атрибуты без загрузки самих файлов.

Версионирование и управление контентом

В системах управления версиями (например, Subversion) PROPFIND используется для получения информации о репозитории, включая свойства ревизий и списки изменённых файлов. В системах управления контентом (CMS) — для навигации по структуре документов и получения метаданных.

Поиск ресурсов

PROPFIND поддерживает поиск по свойствам с помощью элемента <D:search> в теле запроса (расширение, определённое в RFC 5323). Клиент может запросить все ресурсы, у которых определённое свойство равно заданному значению. Это позволяет, например, найти все файлы, созданные определённым автором, или документы с определённым тегом.

Ограничения и критика

  • Нагрузка на сервер: запросы с Depth: infinity могут привести к значительному потреблению ресурсов, особенно на больших файловых хранилищах. Многие серверы ограничивают глубину обхода или запрещают её.
  • Сложность XML: обработка XML-ответов требует дополнительных вычислительных затрат по сравнению с простыми текстовыми списками. Это может быть критично для мобильных устройств или встраиваемых систем.
  • Отсутствие стандартизации поиска: хотя RFC 5323 определяет основы поиска через PROPFIND, многие реализации используют собственные расширения, что снижает совместимость.
  • Безопасность: PROPFIND может раскрывать метаданные, которые администратор считает конфиденциальными (например, пути к файлам, даты создания). Для защиты используются аутентификация (Basic, Digest, NTLM) и шифрование (HTTPS).

Интересные факты

  • Метод PROPFIND является одним из немногих методов HTTP, который возвращает код 207 Multi-Status, специально введённый для WebDAV.
  • В ранних версиях протокола WebDAV (RFC 2518) PROPFIND назывался «PROPFIND» и не имел альтернатив.
  • Некоторые веб-серверы (например, Apache) реализуют PROPFIND через модуль mod_dav, который может быть отключён для повышения безопасности.
  • В операционной системе Windows PROPFIND используется для работы с сетевыми папками, подключёнными по протоколу WebDAV, что позволяет интегрировать удалённые хранилища в стандартный интерфейс проводника.

Источники

  • RFC 2518 — HTTP Extensions for Distributed Authoring — WEBDAV (1999)
  • RFC 4918 — HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV) (2007)
  • RFC 5323 — Web Distributed Authoring and Versioning (WebDAV) SEARCH (2008)
  • Документация Apache HTTP Server — модуль mod_dav
  • Спецификация WebDAV от Microsoft (MS-WDV)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →