Как отвечать и протоколировать WebDAV PROPFIND с помощью OpenOffice - PullRequest
0 голосов
/ 06 ноября 2018

Я получил следующий запрос WebDAV от Open Office Calc. Вы можете увидеть ответ моего сервера под ним. Я полагаю, что это не правильный ответ, потому что после того, как мой сервер отправил ответ, я получил запрос PROPFIND с другими параметрами. После этого следует сообщение HEAD и GET. Может кто-нибудь исправить это, пожалуйста? И объясните, что на самом деле запрашивает Calc в этой последовательности PROPFIND?

Я бы хотел перенести простую HTML-таблицу из моего кода C для Open Office Calc.

Я благодарен Питер

Запрос

PROPFIND / HTTP1.1
Host: WXPPx86BE-2318:80
user:-Agent: OpenOffice/4.0.0
Accept-Encoding: gzip
Depth: 0
Content-Type: application/xml
Content-Lenght: 230

<?xml version="1.0" encoding="utf-8"?>
<propfind xmlns="DAV:"/>
  <prop>
   <resourcetype xmlnx="DAV:"/>
   <IsReadOnly xmlnx="http://ucb.openoffice.org/dav/props/"/>
   <getcontenttype xmlnx="DAV:"/>
   <supportedlock xmlnx="DAV:"/>
  </prop>
</propfind>

Ответ

HTTP/1.1 207 Multi-Status
Content-Type: text/xml
Content-Lenght: XXXX

<?xml version="1.0" encoding="UTF-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://192.168.0.49/"> 
<D:href>/</D:href> 
<D:propstat> <D:prop> <D:resourcetype>
<D:collection/></D:resourcetype>
<IsReadOnly xmlns="http://ucb.openoffice.org/dav/props/">false</IsReadOnly>
<D:getcontenttype>text/html</D:getcontenttype>
<D:supportedlock>
<D:lockentry>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope><D:shared/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
</D:supportedlock>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>

1 Ответ

0 голосов
/ 11 ноября 2018

Добро пожаловать в чудесный мир Дава!

Приведенный выше XML выглядит правильно для меня. Но только пара общих указателей из моего собственного опыта ..

  • PROPFIND недостаточно сам по себе. Клиенты также используют запросы HEAD и OPTIONS для обнаружения возможностей сервера.
  • Как правило, крупный Dav-клиент выполняет около 10 http-запросов для одного пользовательского действия, такого как открытие или сохранение файла.
  • ВСЕ запросы, отправленные клиентом, должны быть успешными и должны быть семантически правильными.

Распространенной ошибкой среди новых разработчиков, работающих с Дэвом, является просто заглушка ответов, например идентификаторов блокировок. Но никогда не делайте этого, каждый ответ должен быть семантически правильным, иначе логика в клиенте не удастся, и это прервет процесс.

К сожалению, зачастую сложно или невозможно получить доступ к журналам от клиента dav, поэтому может быть очень сложно понять, что не так. Единственный подход, который работает (imho), это убедиться, что вы реализуете все, и все правильно.

Возможно, вам будет проще всего использовать библиотеку сервера Dav, такую ​​как SabreDav или Milton (мой (не бесплатный) проект - http://milton.io)

...