Пример минимального цикла ответа на запрос для WebDAV?

Существует ли минимальный (возможно аннотированный) пример типичного цикла запрос-ответ, с заголовками и телом. Насколько я понимаю, это состоит из начальных OPTIONS и последующего обмена PROPFIND - после этого GET и PUT должны быть простыми, поэтому мне не нужен там общий пример.

Я рассматривал возможность раскрытия существующих ресурсов RESTful (коллекций и отдельных элементов внутри) через WebDAV. Мне нужны только базовые функции для работы - перечисление каталогов, чтение и запись файлов - что AFAICT означает, что добавления поддержки PROPFIND должно быть достаточно.

 Julian Reschke13 апр. 2012 г., 20:06
OPTIONS это чисто ... необязательно. То, что нужно реализовать, зависит главным образом от клиента, которого вы хотите использовать.
 AnC13 апр. 2012 г., 22:20
Indeed - но неофициальные данные свидетельствуют о том, что большинство клиентов довольно либеральны. В основном меня интересуют Windows Explorer, Linux (davfs2) и OS X Finder.

Ответы на вопрос(1)

Решение Вопроса

В спецификации приведены примеры:

Minimal

Запрос

OPTIONS /somecollection/ HTTP/1.1
Host: example.org

Отклик

HTTP/1.1 200 OK
Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE
Allow: MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, ORDERPATCH
DAV: 1, 2, ordered-collections
Реалистичная

Запрос

  PROPFIND /somecollection HTTP/1.1
    Depth: 0
    Content-Type: text/xml; charset="utf-8"
    Content-Length: xxx

    <?xml version="1.0" encoding="UTF-8" ?>
    <propfind xmlns="DAV:">
      <prop>
        <supported-live-property-set/>
        <supported-method-set/>
      </prop>
    </propfind>

Отклик

HTTP/1.1 207 Multi-Status
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx

<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:">
  <response>
    <href>http://example.org/somecollection</href>
    <propstat>
      <prop>
        <supported-live-property-set>
          <supported-live-property>
            <prop><ordering-type/></prop>
          </supported-live-property>
          <!-- ... other live properties omitted for brevity ... -->
        </supported-live-property-set>
        <supported-method-set>
          <supported-method name="COPY" />
          <supported-method name="DELETE" />
          <supported-method name="GET" />
          <supported-method name="HEAD" />
          <supported-method name="LOCK" />
          <supported-method name="MKCOL" />
          <supported-method name="MOVE" />
          <supported-method name="OPTIONS" />
          <supported-method name="ORDERPATCH" />
          <supported-method name="POST" />
          <supported-method name="PROPFIND" />
          <supported-method name="PROPPATCH" />
          <supported-method name="PUT" />
          <supported-method name="TRACE" />
          <supported-method name="UNLOCK" />
        </supported-method-set>
      </prop>
      <status>HTTP/1.1 200 OK</status>
    </propstat>
  </response>
</multistatus>
 AnC13 апр. 2012 г., 22:28
Спасибо, это объясняет большинство моих проблем: a) Я использовал обычную (?), А не живую недвижимость, плюс я думаю, что смотрел только на RFC4918. б) Труп сообщает "Не удалось получить доступ к / somecollection (не с поддержкой WebDAV?): не удалось найти ресурс коллекции.", что было большой частью моей путаницы. Игнорирование этого -t) успешно перечисляет ожидаемый ресурс, используя этот пример XML. Я с благодарностью принял ваш ответ - если у меня возникнут новые проблемы, я открою новый, более конкретный вопрос.

Ваш ответ на вопрос