Nginx WebDAV模块试用


 WebDAV (Web-based Distributed Authoring and Versioning)是基于 HTTP 1.1 的一个通信协议。它为 HTTP 1.1 添加了一些扩展(就是在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法),使得应用程序可以直接将文件写到 Web Server 上,并且在写文件时候可以对文件加锁,写完后对文件解锁,还可以支持对文件所做的版本控制。这个协议的出现极大地增加了 Web 作为一种创作媒体对于我们的价值。基于 WebDAV 可以实现一个功能强大的内容管理系统或者配置管理系统。

由于 Web 已经成为 Internet 的基础,因此 HTTP 1.1(超文本传送协议)被证实是用来传输数据的非常灵活的通用协议。 但是,HTTP 存在一些明显的缺点,从而限制了它作为综合的 Internet 通讯协议而被采用:它非常适合用于查看的静态文档,但不能提供以足够复杂(以便向客户端提供丰富的创作功能)的方式来处理文档的方法。例如,当两个作者在未进行交流的情况下同时对一个文档进行更改时,就会出现“更新丢失”问题。 只有由最后一个作者完成、并将修改后的文档重新上载到服务器的修改才会保留下来,另一个作者进行的更改将丢失。

IETF WebDAV 工作组的目标是,设计一个协议,它提供基于万维网的分布式创作和版本控制。 当前的 WebDAV 规范 (IETF RFC 2518) 解决协作式创作工具的三个主要问题:

  • 改写保护。HTTP 1.1 无法确保客户端可以保护资源,并且可以在其他客户端同时编辑它们的情况下进行更改。 使用 WebDAV,可以通过多种方式来锁定资源,以便让其他客户端知道您对所讨论的资源感兴趣,或者防止其他客户端访问该资源。
  • 资源管理。HTTP 只能直接访问单个资源。 WebDAV 提供一种更有效地组织数据的方法。 WebDAV 引入了可包含资源的集合(类似于文件系统文件夹)概念。 通过 WebDAV 进行的资源管理包括如下功能:创建、移动、复制和删除集合,以及集合中的资源或文件。
  • 文档属性。不同类型的数据具有唯一的属性,这有助于描述数据。 例如,在电子邮件中,这些属性可能是发件人的姓名和接收邮件的时间。 在协作文档中,这些属性可能是文档原始作者的姓名和最后一个编辑者的姓名。 因为人们使用的文档类型各不相同,所以可能的属性类型列表也变得无限大。 XML 是 WebDAV 所需的一种可扩展通讯工具。

WebDAV 本身是一个类似于 HTTP 的通信协议(IETF RFC 2518)。它与 HTTP 类似,需要实现服务器和客户端两部分软件。目前 WebDAV 已经有了大量相关的软件实现。在这里是一些与 WebDAV 相关的软件项目。目前 Apache 服务器和 IIS(5.0以上版本)服务器都支持WebDAV,当然Javaer 肯定会用 Tomcat + slide。这里只介绍Nginx。

Nginx原始的WebDAV模块HttpDavModule对协议支持很不完善,连HTTP OPTIONS请求都不支持,不过好在有人写了WebDAV扩展模块,至此Nginx支持了几乎所有的HTTP请求:PUT DELETE MKCOL COPY MOVE PROPFIND OPTIONS。(这里有篇文章是介绍Nginx + Subversion的,目前Nginx对SVN支持还不完善,需要借助其他方法,比如“转发给Apache”或者“nginx + php”)。下面是Nginx完整配置:

location / {
  dav_methods PUT DELETE MKCOL COPY MOVE;
  dav_ext_methods PROPFIND OPTIONS;
  create_full_put_path on;
  dav_access group:rw all:rw;
  root /var/root/;
  client_body_temp_path /var/tmp/;
}

WebDAV客户端我试用了cadaver(还有另一个客户端fusedav我也很感兴趣。下面这个图是对Nginx上资源的操作,资源包括:“两个空文件夹,一个图片文件”。可见当Nginx支持WebDAV时,可以根据协议对文件进行一些简单操作,例如:list move copy等。当然,这里只体现了WebDAV协议“资源管理”的优势,它还能做其他的事。

下面这个图是操作对应的Nginx日志,我们能看到以往不能看到的HTTP请求,OPTIONS 有木有,PROPFIND MOVE COPY 有木有!

参考

  1. http://baike.baidu.com/view/974023.htm
  2. http://wiki.nginx.org/HttpDavModule
  3. https://github.com/arut/nginx-dav-ext-module
  4. tomcat集成webdav


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM