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