【问题标题】:What are your experiences implementing/using WebDAV?您实施/使用 WebDAV 的经验是什么?
【发布时间】:2008-12-11 19:38:45
【问题描述】:

对于当前的项目,我正在考虑实施 WebDAV 来呈现客户可以访问的虚拟文件存储。到目前为止,我只做过谷歌研究,但看起来我只需要实现两种方法就可以逃脱:

GET, PROPFIND

我认为这很棒。不过我只是好奇。如果我想通过以下方式实现文件上传:

PUT

我还没有实现它,但它看起来很简单。我唯一担心的是,如果用户使用的是标准 Vista Explorer 或 OSX Finder,是否会为用户显示进度条。

我想我正在寻找一些来自有 WebDAV 经验的人的故事。

【问题讨论】:

    标签: asp.net windows macos filesystems webdav


    【解决方案1】:

    对于许多 WebDAV 客户端,甚至对于只读访问,您还需要支持 OPTIONS。如果你想支持上传,PUT 显然是必需的,并且某些客户端(MacOS X?)将需要锁定支持。

    (顺便说一句,RFC 4918 是权威信息来源)。

    【讨论】:

      【解决方案2】:

      我在大约一天的工作中实现了大部分 WebDAV 协议:http://github.com/nfarina/simpledav

      我用 Python 编写了它以在 Google App Engine 上运行,我希望任何其他语言都会做出类似的努力。总而言之,就是两页代码。

      我实现了以下方法:OPTIONS、PROPFIND、MKCOL、DELETE、MOVE、PUT、GET。到目前为止,我已经测试了 Transmit 和 Cyber​​duck,两者都很好用。

      希望这可以为下一个对实现 WebDAV 服务器感兴趣的人提供一些指导。这不是一个困难的协议,它只是非常密集的抽象语言,如“深度”和“集合”等等。

      这是规格:http://www.webdav.org/specs/rfc4918.html

      但理解协议的最佳方式是观察客户端与工作服务器的交互。我使用 Transmit 连接到 Box.net 的 WebDAV 服务器并使用 Charles Proxy 监控流量。

      【讨论】:

        【解决方案3】:

        聚会有点晚了,但我已经实现了大部分 webdav 协议,我可以自信地告诉您,您需要实现大部分协议。

        对于 OS/X,您需要 class-2 WebDAV 支持,其中包括 LOCK 和 UNLOCK(我发现完全实现 http If: 标头特别困难,但对于 Finder,您只需要一点。 )

        以下是我的一些个人发现:

        http://sabre.io/dav/clients/windows/ http://sabre.io/dav/clients/finder/

        希望对你有帮助

        【讨论】:

          【解决方案4】:

          如果您在 Tomcat 下运行 Apache Jackrabbit,则可以将其配置为提供 WebDAV 并存储上传的文件。也许这将是一个有用的模型,甚至是计划实施的足够好的替代品。

          Apache Jackrabbit Support for WebDAV

          另外,您可能想了解 BitKinex 客户端(30 天免费试用),我发现它是测试 WebDAV 服务器的有用工具。

          BitKinex Home Page

          【讨论】:

            【解决方案5】:

            我们在内部使用 WebDAV 向防火墙外的客户端提供基于文件夹的某些文件共享视图。我们为此使用 IIS6。

            基本上,它归结为在 IIS 中创建一个虚拟目录,该目录映射到您希望通过 WebDAV 提供的每个网络文件系统。使用来自“位于另一台计算机上的共享”的内容进行设置——使用共享的 UNC 路径作为网络目录值。我们打开除索引此资源之外的所有选项。禁用所有默认内容页面。打开 Windows 集成身份验证(我们也使用 SSL 设置)。我将 root 设置为拒绝访问匿名用户并允许访问任何经过身份验证的用户。我们还有一个通配符 MIME 映射(.* 到 application/octet-stream)。在 IIS 中启用 WebDAV Web 服务扩展。您还需要设置 Web 服务器以将权限委派给您可能正在访问的所有文件服务器,以便它可以传递用户的凭据。

            如果您有 Macintosh 客户端,您可能还需要一个 ISAPI 过滤器,将 Darwin 客户端的 401 错误映射到 403 错误。当您没有写入目录的权限时,Microsoft 和 Apple 在如何处理这种情况上存在分歧。 Apple 不断重新发送 401(拒绝访问)错误的凭据,将其转换为 403(禁止访问)错误可防止这种情况发生。默认情况下,Apple 喜欢在它访问的每个目录中写入一个“点”文件。如果您没有过滤器,则浏览您没有写入权限的目录最终会导致 Finder 崩溃。如果需要,我有这方面的源代码。

            这一切都在我的脑海中。有可能(可能?)我可能错过了一些东西。如果您有任何问题,请随时通过我网站上的联系信息与我联系。

            【讨论】:

              【解决方案6】:

              我们的基于 Web 的产品上有一个 webDAV servlet。

              我发现 Apache Jackrabbit 对实现它很有帮助。但是 webDav 在客户端支持方面是一个严肃的 P.I.T.A。

              许多客户端实现的行为差异很大,您很可能必须支持几种不同类型的错误实现。

              一些例子: MS vista 仅支持通过 SSL 进行身份验证

              大多数基于 Windows 的 webDAV 客户端假定您的 webdav-server/let 是一个共享点服务器,并且会相应地采取行动(因此不根据 webDAV 协议)

              这方面的一个例子是,您需要在服务器的根目录上允许未经身份验证的 LOCK 请求(即 yourdomain.com/ 而不是 yourdomain.com/where/webdav/should/live),否则您将无法写入在 MS Windows 中访问。 (这是 Tomcat 机器上的一个严肃的 P.I.T.A,你的东西通常存放在 server.com/servlets/paths/thelocation 中)

              大多数(所有?)版本的 MS Office 对 webdav 链接的响应不同。

              我想我的观点是将 webdav 支持集成到现有产品中可能比您预期的要困难得多。如果可能的话,我建议使用(半)独立的 webDAV 服务器,例如 jackrabbit webdavServer 或 apache mod_webdav

              【讨论】:

              • "MS vista 仅支持 SSL 身份验证" -- Vista 支持基于 SSL 的 DIGEST 和 BASIC 身份验证,以及基于普通连接的 DIGEST。有一个注册表应该在普通连接上打开 BASIC auth,但它对我不起作用:-(
              【解决方案7】:

              我发现 OS X 的 Finder WebDAV 支持非常挑剔。为了获得读写支持,除了其他位之外,您还必须实现 LOCK。

              我为 Postres 数据库编写了一个 WebDAV 接口,其中 python 模块以分层文件夹式结构存储在数据库中。使用 cadaver 访问它工作正常,IIRC 一个 GUI windows 浏览器也工作,但 Finder 拒绝将共享挂载为只读以外的任何内容。

              所以,我不知道是否会给出一个进度条。我正在处理的文件足够小,以至于读取/复制它们几乎是瞬时的。我认为使用 Finder 复制大文件可能会提供一个进度条 - 它适用于任何其他类型的挂载共享。

              【讨论】:

                【解决方案8】:

                这是另一个 WSGI WebDAV 的开源项目 http://code.google.com/p/wsgidav/ 我在那里拿起了 PyFileServer 项目。

                【讨论】:

                  猜你喜欢
                  • 2010-10-20
                  • 1970-01-01
                  • 2015-01-15
                  • 2010-09-11
                  • 2018-11-19
                  • 1970-01-01
                  • 2010-12-11
                  • 2016-09-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多