This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

客户端互操作性

所有的 WebDAV 客户端实现都可以分为三类—独立的应用程序, 文件浏览器 扩展和文件系统实现. 这三种类型基本上规定了用户可享受到的 WebDAV 功能 类型. 表 C.1 “常见的 WebDAV 客户端软件” 给出几种 WebDAV 客户 端软件的分类, 以及简短的介绍. 读者可以在下面的章节里看到关于这些软件更 详细的信息.

表 C.1. 常见的 WebDAV 客户端软件

软件 类型 Windows Mac Linux 描述
Adobe Photoshop 独立的 WebDAV 应用程序 X     图片编辑软件, 支持直接读写由 WebDAV URL 指定的文件
cadaver 独立的 WebDAV 应用程序   X X 命令行 WebDAV 客户端, 支持文件浏览, 目录树操作, 以及加锁, 解锁
DAV Explorer 独立的 WebDAV 应用程序 X X X Java GUI 工具, 用于浏览 WebDAV 共享目录
Adobe Dreamweaver 独立的 WebDAV 应用程序 X     Web 开发软件, 支持直接读写由 WebDAV URL 指定的文件
Microsoft Office 独立的 WebDAV 应用程序 X     办公套件, 其中的几个组件支持直接读写由 WebDAV URL 指定的 文件
Microsoft Web Folders 文件浏览器 WebDAV 扩展 X     GUI 文件浏览器程序, 支持在 WebDAV 共享目录上执行目录树 操作
GNOME Nautilus 文件浏览器 WebDAV 扩展     X GUI 文件浏览器程序, 支持在 WebDAV 共享目录上执行目录树 操作
KDE Konqueror 文件浏览器 WebDAV 扩展     X GUI 文件浏览器程序, 支持在 WebDAV 共享目录上执行目录树 操作
Mac OS X WebDAV 文件系统实现   X   支持挂载 WebDAV 共享目录的操作系统.
Novell NetDrive WebDAV 文件系统实现 X     驱动器映射程序, 用来给挂载的远程 WebDAV 共享目录分配 Windows 驱动器盘符
SRT WebDrive WebDAV 文件系统实现 X     文件传输软件, 另外它还可以用来为挂载的远程 WebDAV 共享 目录分配 Windows 驱动器盘符
davfs2 WebDAV 文件系统实现     X Linux 文件系统驱动程序, 支持挂载 WebDAV 共享目录

独立的 WebDAV 应用程序

一个 WebDAV 应用程序是一个可使用 WebDAV 协议与 WebDAV 服务器进行 通信的程序. 下面我们将介绍最常见的几种 WebDAV 应用程序.

Microsoft Office, Dreamweaver, Photoshop

在 Windows 平台上, 有几款非常知名的应用程序已经集成了 WebDAV 的客户端功能, 例如 Microsoft Office,[82] Adobe Photoshop 和 Dreamweaver. 它们都支持直接读写由 WebDAV URL 指定的 文件, 而且在编辑文件时, 它们都倾向于大量使用 WebDAV 锁.

注意, 虽然上面所说的几款应用程序也支持 Mac OS X 平台, 但 它们不一定直接支持 WebDAV. 实际上, Mac OS X 的 File→Open 对话框根本就不允许用户输入 路径或 URL. 自从 OS X 从底层文件系统上支持 WebDAV 后, Macintosh 的开发人员就有意地从程序中删除了对 WebDAV 的支持.

cadaver, DAV 浏览器

cadaver 是用于浏览和修改 WebDAV 共享目录的 Unix 命令行程序, 它使用 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/. 它支持 cadaver 的所有 功能, 并且可移植性更强, 具有更加友好的 GUI 界面. 它还是第一个 支持新的 WebDAV 访问控制协议 (WebDAV Access Control Protocol, RFC 3744) 的客户端程序.

当然, DAV Explorer 对 ACL 的支持在这里没什么用, 因此 mod_dav_svn 根本就不支持 ACL. 实际上, cadaver 和 DAV Explorer 支持的某些 DeltaV 命令其实没什么特别大 的用处, 因此它们不允许 MKACTIVITY 请求. 但 这些都无关紧要, 我们假充所有的 WebDAV 客户端都针对一个自动版本 控制的仓库进行操作.

文件浏览器 WebDAV 扩展

有些流行的文件浏览器 GUI 程序支持 WebDAV 扩展功能, 允许用户 浏览一个 DAV 共享目录, 就像在浏览一个普通的本地目录, 而且还可以在 共享目录中执行基本的目录树编辑操作. 例如, Windows 文件浏览器可以把 WebDAV 服务器作为一个 网络位置 进行浏览, 用户可以 通过拖拽来上传或下载文件, 还可以继续使用通常的方式来重命名, 复制或 删除文件. 但是由于这仅仅是文件浏览器的功能, DAV 共享目录对其他普通 的应用程序仍然是不可见的, 所有的 DAV 交互都必须通过文件浏览器接口.

Microsoft Web Folders

Microsoft 是 WebDAV 的原始赞助商之一, 最早在 Windows 98 中 集成了 WebDAV 客户端, 即 Web Folders. 该客户端同样出现在 Windows NT 4.0 和 Windows 2000 中.

原始的 Web Folders 其实是一个文件浏览器扩展, 但它工作得已经 足够好了. 在 Windows 98, 如果在 我的电脑 中看不到 Web Folders, 则还要显式地安装它. 在 Windows 2000, 只需要添加一个新的 网络位置, 输入 URL, WebDAV 共享目录就会马上跳 出来.

到了 Windows XP, Microsoft 决定推出一款新的 Web Folders 程序, 即 WebDAV Mini-Redirector. WebDAV Mini-Redirector 是一个处于文件 系统层的客户端, 允许 WebDAV 共享目录被挂载成一个驱动器盘符. 但 不幸的是, 这个程序的问题太多. WebDAV Mini-Redirector 通常情况下 会试图把 HTTP URL (http://host/repos) 转换成 UNC 共享记号 (\\host\repos), 它还经常用 Windows Domain 认证来响应 HTTP 认证请求, 把用户名转换成 HOST\username. 这些互操作问题非常严重, 在网上随处可见, 很多用户都不堪其扰. Apache WebDAV 模块的原始作者 Greg Stein 就直言不讳地说 XP Web Folders 根本就不能支持 Apache 服务器.

Windows Vista 的 Web Folders 最初版本几乎和 XP 一样, 所以它也 相同的问题, 但幸运的是, Microsoft 将会在 Vista Service Pack 里 修复它们.

然而, 似乎还是有一些方法能够让 XP 和 Vista 的 WebDAV 客户端支持 Apache 服务器, 很多用户都表示他们成功地解决了问题, 于是我们打算在 这里简单地介绍一下这些方法.

如果是 Windows XP 你就有两个选择, 第一个是在 Microsoft 的网站 搜索 KB907306—Web Folders 软件更新. 它可能会解决你的所有 问题, 如果没有, 那应该是因为系统中的 Web Folders 还是 XP 前的版本. 为了进一步挖掘下去, 你需要到 Network Places 那儿添加一个新的网络 位置, 在弹出的对话框中输入仓库的 URL, 同时还要在 URL 中 加上端口号, 例如, 你应该把 http://host/repos 写成 http://host:80/repos, 如果需要认证, 就输入 Subversion 的凭证.

如果是 Windows Vista, 相同的 KB907306 更新可能会解决所有问题, 但也有可能仍有问题存在. 有些用户报告说 Vista 会把所有的 http:// 看成是不安全的连接, 除非使用 https://, 否则的话 Vista 会让所有的来自 Apache 的认证请求都以失败返回. 如果用户无法通过 SSL 连接 Subversion 仓库, 可以通过修改系统注册表来禁止 Vista 的这种行为, 修改的方法是把 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel 的值由 1 改成 2. 最后再提醒一 点, 要让 Web Folders 指向仓库的根目录, 而不是仓库内的子目录 (例如 /trunk), 因为 Vista Web Folders 似乎 只有在面对仓库的根目录时才能正常工作.

通常情况下, 上面所说的方法可能会解决你的问题, 但使用第三方的 WebDAV 客户端程序 (例如 WebDrive 或 NetDrive) 可能会获得更好的 体验.

Nautilus, Konqueror

Nautilus 是 GNOME 桌面环境 (http://www.gnome.org) 标准的文件管理与浏览器, 而 Konqueror 是 KDE 桌面环境 (http://www.kde.org) 的文件管理与浏览器, 它们都内 建了一个文件浏览器级别的 WebDAV 客户端, 而且对自动版本控制的仓库 支持得很好.

在 GNOME 的 Nautilus 里, 选择菜单项 File→Open location, 在弹出的对话框中输入仓库的, 然后仓库就 能像其他文件系统那样展现出来.

在 KDE 的 Konqueror 里, 在地址栏输入 URL 时, 必须使用 webdav:// 模式. 如果用户输入了 http:// 模式的 URL, Konqueror 将表现得如同一个 网页游览器, 用户将看到由 mod_dav_svn 生成的 HTML 目录列表. 如果输入的是 webdav://host/repos, 而不是 http://host/repos, Konqueror 将变成一个 WebDAV 客户端, 把仓库按照文件系统的形式展现出来.

WebDAV 文件系统实现

按理说, WebDAV 文件系统实现应该算作最优秀的一类 WebDAV 客户端. 它被实现成一个底层的文件系统模块, 通常位于操作系统的内核里, 这就意味 着 DAV 共享目录可以像其他网络文件系统那样被挂载, 类似于 Unix 的 NFS 或 Windows 的 SMB. 这种 WebDAV 客户端为所有的程序提供了完全透明 的 WebDAV 读写访问, 应用程序甚至不会意识到 WebDAV 请求正在生成.

WebDrive, NetDrive

WebDrive 和 NetDrive 是两款非常优秀的商业软件, 允许 WebDAV 共享目录作为一个驱动器盘符挂载到 Windows 系统中. 它们允许用户 像访问真实的本地磁盘驱动器那样访问基于 WebDAV 的伪驱动器, 而且 操作起来不会有任何区别. 为了购买 WebDrive, 读者可以咨询 South River Technologies 公司 (http://www.southrivertech.com), Novell 的 NetDrive 可 以从网上免费获取, 但要求用户必须具备一个 NetWare 许可证.

Mac OS X

Apple 公司的 OS X 操作系统集成了一个文件系统级别的 WebDAV 客户端. 从 Finder 开始, 选择菜单项 Go→Connect to Server, 然后输入 WebDAV 的 URL, 最终 WebDAV 共享目录将作为一个磁盘出现在桌面上, 看起来和其他已挂载的卷没什么两样. 用户还可以从 Darwin 终端上执行 挂载操作, 方法是在 mount 的命令行参数上把文件 系统类型指定成 webdav:

$ mount -t webdav http://svn.example.com/repos/project /some/mountpoint
$

注意, 如果 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 davfs2 是 Linux 内核的一个文件系统模块, 该项目的 主页位于 http://savannah.nongnu.org/projects/davfs2. davfs2 一旦安装完成, 用户就可以使用下面的命令挂载 WebDAV 共享目录:

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


[82] 由于某种 原因, Microsoft Access 移除了对 WebDAV 的支持, 但 Office 套件内的其他程序仍然支持 WebDAV.