客户端交互性

所有的WebDAV客户端分为三类—独立应用程序,文件浏览器扩展或文件系统实现,这些分类定义了WebDAV用户可用的功能性。表 B.1 “Common WebDAV Clients”给WebDAV常见软件进行了分类,并提供了的简短描述。

一个WebDAV应用就是一个内置WebDAV协议的程序,我们会覆盖大多数支持WebDAV的流行程序。

在Windows下,有一些有名的集成WebDAV客户端功能的软件,例如Microsoft's Office、[54]Adobe的Photoshop和Macromedia的Dreamweaver。它们都可以直接打开和保存URL,也可以在编辑时大量的使用WebDAV的锁定。

请注意,尽管这些程序都有Mac OS X版本,但在这个平台并不直接支持。事实上,在Mac OS X上,不允许File->Open对话框中出现URL路径。也有可能WebDAV特性是被故意漏掉,因为OS X已经提供了完美的WebDAV文件系统支持。

Cadaver是一个用来浏览和修改WebDAV共享的Unix命令行程序,就像Subversion客户端,它使用了neon的HTTP库—不需要惊讶,neon和cadaver的作者是同一个人。Cadaver是自由软件(GPL许可证),在http://www.webdav.org/cadaver/上。

使用cadaver就像使用命令行的FTP程序,因此它很适合基本的WebDAV调试。它可以以压缩方式上传和下载文件,也会检验属性、拷贝、移动、锁定和解锁文件:

$ cadaver http://host/repos
dav:/repos/> ls
Listing collection `/repos/': succeeded.
Coll: > foobar                                 0  May 10 16:19
      > playwright.el                       2864  May  4 16:18
      > proofbypoem.txt                     1461  May  5 15:09
      > westcoast.jpg                      66737  May  5 15:09

dav:/repos/> put README
Uploading README to `/repos/README':
Progress: [=============================>] 100.0% of 357 bytes succeeded.

dav:/repos/> get proofbypoem.txt
Downloading `/repos/proofbypoem.txt' to proofbypoem.txt:
Progress: [=============================>] 100.0% of 1461 bytes succeeded.

DAV Explorer是另一个独立运行的WebDAV客户端,使用Java编写,有一个类Apache的许可证,网站是http://www.ics.uci.edu/~webdav/。DAV Explorer与cadaver功能差不多,优点可移植,并有一个用户友好的GUI程序。它也是最早的支持WebDAV访问控制协议(RFC 3744)的客户端。

当然,DAV Explorer浏览器的ACL支持在这种情况下是没用的,因为mod_dav_svn并不支持。事实上,Cadaver 和DAV Explorer支持的DeltaV限制命令也没什么用出,因为他们不允许MKACTIVITY请求。但没有关系,我们只是假定这些客户端都是在操作自动版本化的版本库。

一些流行的文件浏览器程序支持WebDAV扩展,允许用户浏览DAV共享如同访问本机,并允许基本的目录树操作。例如,Windows的资源管理器可以把WebDAV服务器看作一个“网络位置”,用户可以从桌面托拽文件到这个目录,或者是重命名、拷贝或者删除文件。但是这只是文件浏览器的特性,DAV共享对于普通的应用不可见,所有的DAV操作需要通过浏览器界面完成。

Microsoft是WebDAV规范最早的支持者,最早在Windows 98配置客户端,被称作“网络文件夹”,这个客户端在Windows NT4和2000上也存在。

最早的Webfolders客户端是浏览器的扩展,主要的浏览文件系统的GUI程序,工作良好。在Windows 98,如果“我的电脑”里没有网络文件夹,这个特性需要明确安装。在Windows 2000,只需要添加一个新的“网络位置”,输入URL,WebDAV共享就会弹出让你浏览。

伴随着Windows XP,Microsoft开始了另一种网络文件夹的实现,叫做“WebDAV mini-redirector”,这个新的实现是文件系统级的客户端,允许WebDAV转载到驱动器盘符上。不幸的是,这个实现充满难以相信的bug。客户端经常会尝试把http的URL(http://host/repos)转化为UNC共享符号(\\host\repos),它也经常使用Windows域认证来回应基本的HTTP认证,按照HOST\username发送用户名。这类互动性问题在网络上大量传播,使大量用户受挫。即使是ApacheWebDAV的作者Greg Stein也建议不要对Apaache服务器使用XP的网络文件夹。

结果是原始的网络文件夹并没有在XP中死掉,只是要被埋葬了。还是有办法适用这个技术:

有各种解决问题的方法,但好像没有一种能够在各版本和各级别的Windows XP中有效。在我们的测试里,只有上面这种策略在各种系统中有效。WebDAV社区一致认为避免使用新的网络文件夹实现,而使用旧的,如果你希望在Windows XP使用真实的文件系统级的客户端,请使用第三方的程序,例如WebDrive或NetDrive。

最后一个提示:如果你尝试使用XP的网络文件夹,确定你有Microsoft最新的版本,Microsoft在2005年1月发布了一个问题修正,在http://support.microsoft.com/?kbid=892211,特别的,这个发布是用来修正在访问DAV时发生无限递归的问题。

Nautilus是GNOME桌面(http://www.gnome.org)官方的文件管理/浏览器,KDE桌面(http://www.kde.org)的则是Konqueror。两个应用程序都是浏览器级别的WebDAV客户端,对自动版本化的版本库工作良好。

GNOME的Nautilus里,从File menu选择Open location,并且输入URL。版本库就会显示出来,就像其他文件系统。

KDE的Konqueror里你需要在地址栏使用webdav://模式来输入URL,如果你输入http://的URL,Konqueror会像普通的web浏览器。你会看到mod_dav_svn输出的普通HTML目录列表。通过输入webdav://host/repos代替http://host/repos,Konqueror就成为了一个WebDAV客户端,并且按照文件系统的方式显示版本库。

WebDAV文件系统实现被认为是最佳的WebDAV客户端,它通过低级的文件系统模块实现,通常在操作系统的核心。这意味着DAV共享像网络的其他文件系统一样装载,就像在Unix下面装载NFS,或者是在Windows下装载一个SMB共享。结果就是这种客户端为所有程序提供了对WebDAV得透明访问。

WebDrive和NetDrive都是完美的商业产品,允许将WebDAV绑定到Windows的盘符,当我们写作的时候,WebDrive可以从South River Technologies(http://www.southrivertech.com)购买。NetDrive由Netware装运,通过查找“netdrive.exe”就会找到。尽管它可以自由得到,用户还是需要一个Netware许可证。(如果着听起来有点奇怪,你并不孤单,看Novell网站的这个页面:http://www.novell.com/coolsolutions/qna/999.html

Apple的OS X操作系统是集成的文件系统级的客户端,通过Finder,选择Go menuConnect to Server条目,输入WebDAV的URL,会在桌面显示一个磁盘,就像其他装载的卷。[55]。

注意如果mod_dav_svn是1.2之前的版本,OS X不能按照可读写装载,而是会成为只读。这是因为,OS X坚持要读些共享支持锁定,而锁定文件出现在Subversion 1.2。

警告一句话:OS X的WebDAV客户端有时候对HTTP重定向很敏感,如果OS X不能装载版本库,你或许需要开启Apache服务器httpd.conf的BrowserMatch指示:

BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully

Linux davfs2是一个Linux核心的文件系统模块,开发坐落在http://dav.sourceforge.net/。一旦安装,一个WebDAV网络共享可以使用mount命令装载:

$ mount.davfs http://host/repos /mnt/dav


[54] WebDAV支持因为一些原因从Microsoft Access里删除了。

[55] 在Darwin终端,你可以运行mount -t webdav URL /mountpoint