附录 C. WebDAV和自动版本化

目录

WebDAV基本概念
仅是平常的WebDAV
DeltaV扩展
Subversion和DeltaV
影射Subversion到DeltaV
自动版本化支持
选择mod_dav_lock
自动版本化交互性
Win32网络文件夹
Mac OS X
Unix: Nautilus 2
Linux davfs2

WebDAV是HTTP的一个扩展,作为一个文件共享的标准不断发展。当今的操作系统变得极端的web化,许多内置了对装配WebDAV服务器导出的“共享”的支持。

如果你使用Apache/mod_dav_svn作为你的Subversion网络服务器,某种程度上,你也是在运行一个WebDAV服务器。这个附录提供了这种协议一些背景知识,Subversion如何使用它,Subversion如何和认识WebDAV的软件交互工作。

WebDAV基本概念

这个小节提供了对WebDAV背后思想的一个非常简短和普通的总体看法,为理解WebDAV在客户端和服务器之间的兼容性问题打下基础。

仅是平常的WebDAV

RFC 2518为HTTP 1.1定义了一组概念和附加扩展方法来把web变成一个更加普遍的读/写媒体,基本思想是一个WebDAV兼容的web服务器可以像普通的文件服务器一样工作;客户端可以装配类似于NFS或SMB的WebDAV“共享”。

然而,必须注意到RFC 2518并没有提供任何版本控制模型,尽管DAV中有“V”。基本的DAV客户端和服务器只是假定每个文件或目录只有一个版本存在,可以重复的覆盖。[47]

这是基本的WebDAV引入的新概念和方法:

新的写方法

超出了标准HTTP的PUT方法(用来创建和覆盖web资源),WebDAV定义了新的COPYMOVE方法用来复制或重新组织资源。

集合

这是一个简单的WebDAV术语用来表示一组资源(URI),在大多数情况下,你可以说以“/”结尾的东西是一个集合,文件资源可以使用PUT方法写或创建,而集合资源使用MKCOL方法创建。

属性

这与Subversion中是同一个思想—附加在文件和集合上的元数据,一个客户端可以使用新方法PROPFIND列出或检索附加在一个资源上的属性,也可以使用PROPPATCH方法修改这些属性。一些属性是完全由用户控制的(例如,一个“color”属性),还有一些是WebDAV服务器创建和控制的(例如,一个保存文件最后修改时间的属性)。前一种叫做“dead”属性,后一种叫做“live”属性。

锁定

WebDAV服务器可以决定为客户端提供一个锁定特性—这部分的规范是可选的,尽管大多数WebDAV服务器提供了这个特性。如果提供这个特性,客户端可以使用新的LOCKUNLOCK方法来调节访问资源的过程,在大多数情况下是使用独占写锁(在“锁定-修改-解锁 方案”一节讨论的),尽管共享写锁也是可以的。

DeltaV扩展

因为RFC 2518漏下了版本概念,另一个小组留下来负责撰写RFC 3253来添加WebDAV的版本化。WebDAV/DeltaV客户端和服务器经常叫做“DeltaV”客户端和服务器,因为DeltaV暗含了基本的WebDAV。

DeltaV引入了完全的新的首字母缩写,但并不是被逼迫的。想法相当的直接,如下是DeltaV引入的新概念和方法:

每资源的版本化

像CVS和其他版本控制系统,DeltaV假定每个资源有一个潜在的无穷的状态,一个客户端可以使用VERSION-CONTROL放置一个版本控制之下的资源,这创建了一个新的版本控制资源(VCR),每次你修改VCR(通过PUTPROPPATCH等),这个资源的新状态就会创建,叫做一个版本资源(Version Resource,VR)。VCR和VR还是普通的web资源,使用URL定义,特定的VR也会拥有易读的名字。

服务器端的工作拷贝模型

一些DeltaV服务器支持在服务器创建虚拟“工作区”,所有的工作在这里执行。客户端使用MKWORKSPACE方法来创建私有区域,然后他们说明修改特定的VCR,“把它们检出到”工作拷贝,编辑,然后再次“检入”。在HTTP术语里,方法的顺序可能是CHECKOUTPUTCHECKIN,会创建一个新的VR,每个VCR也有一个“历史”资源用来追踪和排序它的各种VR状态。

客户端工作拷贝模型

一些DeltaV服务器也支持客户端可以有完全特定VR的私有工作拷贝的思想,(这就是CVS和Subversion的工作原理。)当客户端希望提交修改到服务器,它通过使用MKACTIVITY方法创建一个临时服务器事务(叫做一个活动)开始。然后客户端在每个希望修改的VR上执行一个CHECKOUT操作,这在活动里创建了一些临时“工作资源”,然后可以使用PUTPROPPATCH方法修改。最后,客户端对每个工作资源执行一个CHECKIN,在每个VCR创建了一个VR,并且整个活动会被删除。

配置

DeltaV允许你定义叫做“配置”的灵活的VCR集合,不需要对应特定的目录,每个VCR的内容可以使用UPDATE方法指向特定的VR。一旦配置是理想的,客户端可以创建一个整个配置的“快照”,叫做“基线”。客户端使用CHECKOUTCHECKIN方法捕捉特定的配置状态,很像它们使用这些方法创建VCR的特定VR状态。

扩展性

DeltaV定义了新方法REPORT,允许客户端和服务器执行自定义的数据交换。客户端发送一个带有包含自定义数据的完全标记的XML主体的REPORT请求;假定服务器理解特定的报告类型,它使用一个等同的XML主体来响应,这个技术与XML-RPC很类似。

自动版本化

对大多数,这是DeltaV的“杀手”特性,如果DeltaV服务器支持这个特性,然后基本的WebDAV客户端(例如,那些不知道版本化的客户端)仍然可以对服务器进行写操作,服务器可以悄无声息的执行版本操作。在最简单的例子里,一个从基本的WebDAV客户端发送的无知的PUT可能会被服务器转化为CHECKOUTPUTCHECKIN



[47] 因为这个原因,一些人开玩笑说WebDAV的客户端是“WebDA”客户端!