目录
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定义了新的COPY
和MOVE
方法用来复制或重新组织资源。
collection是一个简单的WebDAV术语用来表示一组资源,在大多数情况下可以看作一个目录,文件资源可以使用PUT
方法写或创建,而集合资源使用MKCOL
方法创建。
这与Subversion中是同一个思想—附加在文件和集合上的元数据,一个客户端可以使用新方法PROPFIND
列出或检索附加在一个资源上的属性,也可以使用PROPPATCH
方法修改这些属性。一些属性是完全由用户控制的(例如,一个“color”属性),还有一些是WebDAV服务器创建和控制的(例如,一个保存文件最后修改时间的属性)。前一种叫做“dead属性”,后一种叫做“live属性”。
WebDAV服务器可以决定为客户端提供一个锁定特性—这部分的规范是可选的,尽管大多数WebDAV服务器提供了这个特性。如果提供这个特性,客户端可以使用新的LOCK
和UNLOCK
方法来调节访问资源的过程,在大多数情况下是使用独占写锁(在“锁定-修改-解锁 方案”一节讨论的),尽管在一些服务器实现里共享写锁也是可以的。
一个更近的规范(RFC 3744)定义了一个WebDAV资源访问控制列表的系统,一些客户端和服务器正在实现这个特性。
因为RFC 2518漏下了版本概念,另一个委员会留下来负责撰写RFC 3253来添加WebDAV的版本化,也就是“DeltaV”。WebDAV/DeltaV客户端和服务器经常叫做“DeltaV”客户端和服务器,因为DeltaV暗含了基本的WebDAV。
DeltaV引入了完全的新的首字母缩写,但并不是被逼迫的,想法相当的直接:
像CVS和其他版本控制系统,DeltaV假定每个资源有一个潜在的无穷的状态,一个客户端可以使用VERSION-CONTROL
放置一个版本控制之下的资源。
一些DeltaV服务器支持在服务器创建虚拟工作区,所有的工作在这里执行。客户端使用MKWORKSPACE
方法来创建私有区域,然后他们说明修改特定的资源,“把它们检出到”工作区,编辑,然后再次“检入”。在HTTP术语里,方法的顺序可能是CHECKOUT
、PUT
、CHECKIN
。
一些DeltaV服务器也支持客户端可以有完全特定私有工作拷贝的思想,当客户端希望提交修改到服务器,它通过使用MKACTIVITY
方法创建一个临时服务器事务(叫做一个活动)开始。然后客户端在每个希望修改和发送PUT
请求的资源上执行一个CHECKOUT
操作,最后,客户端对每个工作资源执行一个CHECKIN
,在每个VCR创建了一个VR,并且整个活动会被删除。
DeltaV允许你定义叫做“配置”的灵活的资源集合,不需要对应特定的目录。一个配置可以指向特定的文件的版本,然后可以做“基线”快照,这很像标签。
DeltaV定义了新方法REPORT
,允许客户端和服务器执行自定义的数据交换。尽管DeltaV定义了一系列客户端可以请求的标准历史报告,服务器也可以自由定义报告。客户端发送一个带有包含自定义数据的完全标记的XML主体的REPORT
请求;假定服务器理解特定的报告类型,它使用一个等同的XML主体来响应,这个技术与XML-RPC很类似。