附录 B. WebDAV和自动版本化

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

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

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

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

悲惨的是,WebDAV规范RFC 2518并没有提供任何版本控制模型,尽管DAV中有“V”。基本的DAV客户端和服务器只是假定每个文件或目录只有一个版本存在,可以重复的覆盖。[53]

这是基本的WebDAV引入的概念和术语:

资源

WebDAV方言里将服务器端的对象(可以用URI描述)称为资源

新的写方法

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

集合

collection是一个简单的WebDAV术语用来表示一组资源,在大多数情况下可以看作一个目录,文件资源可以使用PUT方法写或创建,而集合资源使用MKCOL方法创建。

属性

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

锁定

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

访问控制

一个更近的规范(RFC 3744)定义了一个WebDAV资源访问控制列表的系统,一些客户端和服务器正在实现这个特性。

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

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

每资源的版本化

像CVS和其他版本控制系统,DeltaV假定每个资源有一个潜在的无穷的状态,一个客户端可以使用VERSION-CONTROL放置一个版本控制之下的资源。

服务器端的工作拷贝模型

一些DeltaV服务器支持在服务器创建虚拟工作区,所有的工作在这里执行。客户端使用MKWORKSPACE方法来创建私有区域,然后他们说明修改特定的资源,“把它们检出到”工作区,编辑,然后再次“检入”。在HTTP术语里,方法的顺序可能是CHECKOUTPUTCHECKIN

客户端工作拷贝模型

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

配置

DeltaV允许你定义叫做“配置”的灵活的资源集合,不需要对应特定的目录。一个配置可以指向特定的文件的版本,然后可以做“基线”快照,这很像标签。

扩展性

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



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