如何使用OpenOffice进行WebDAV PROPFIND响应和协议协商



我从Open Office Calc收到了以下WebDAV请求。你可以在下面看到我的服务器响应。我想这不是正确的答案,因为在我的服务器发送响应后,收到了另一个具有相同参数的PROPFIND请求。之后,HEAD和GET消息随之而来。有人能纠正一下吗?并解释Calc在这个PROPFIND序列中实际要求的是什么?

我想从我的C代码中转移一个简单的html表,用于Open Office Calc.

我很感激Peter

请求

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>

欢迎来到Dav的奇妙世界!

上面的XML在我看来是正确的。但这只是我自己经验中的几个一般性指针。。

  • PROPFIND本身是不够的。客户端还使用HEAD和OPTIONS请求来发现服务器功能
  • 通常,一个主要的Dav客户端将为单个用户操作(如打开或保存文件(执行大约10个http请求
  • 客户端发送的所有请求都必须成功,并且必须在语义上正确

在使用Dav的新开发人员中,一个常见的错误就是剔除响应,例如锁定ID。但永远不要这样做,每个响应必须在语义上正确,否则客户端内部的逻辑将失败,它将中止进程。

不幸的是,从dav客户端访问日志通常很难或不可能,因此很难找出问题所在。唯一有效的方法(imho(是确保实现所有内容,并且所有内容都是正确的。

你可能会发现使用Dav服务器库最容易,比如SabreDav或Milton(我的(非免费(项目-http://milton.io)

最新更新