附录D. 锁空资源 (Lock-null Resources)
附录D. 锁空资源 (Lock-null Resources)
锁定未映射URL的原始WebDAV模型创建了"锁空资源"。这个模型过于复杂,并且发现了一些互操作性和实现问题。锁定未映射URL的新WebDAV模型(见第7.3节)创建"锁定的空资源"。锁空资源已被弃用。本节简要讨论原始模型,因为客户端必须能够处理任一模型。
在原始的"锁空资源"模型中(不再建议实现):
-
锁空资源有时显示为"Not Found"。服务器对除PUT、MKCOL、OPTIONS、PROPFIND、LOCK、UNLOCK之外的任何方法响应404或405。
-
但是,锁空资源确实作为其父集合的成员出现。
-
如果锁在转换为常规资源之前消失,服务器会完全删除锁空资源(其URI变为未映射)。回想一下,锁不仅在过期或解锁时消失,而且如果资源被重命名或移动,或者如果任何父集合被重命名或移动,锁也会被删除。
-
如果对URL的PUT请求成功,服务器会将锁空资源转换为常规资源。
-
如果对URL的MKCOL请求成功,服务器会将锁空资源转换为集合(尽管互操作性经验表明并非所有服务器都遵循此要求)。
-
为DAV:lockdiscovery和DAV:supportedlock属性定义了属性值,但不一定为其他属性(如DAV:getcontenttype)定义。
客户端可以轻松地与支持旧模型"锁空资源"和推荐的"锁定的空资源"模型的服务器互操作,只需在LOCK到未映射URL后仅尝试PUT,而不是MKCOL或GET。
D.1. 使用LOCK创建资源的客户端指南 (Guidance for Clients Using LOCK to Create Resources)
实现本规范的WebDAV客户端可能会发现创建锁空资源的服务器(使用[RFC2518]在本规范之前实现)以及创建锁定空资源的服务器。对LOCK请求的响应不会指示创建了什么类型的资源。有几种技术可以帮助客户端处理任一类型。
-
如果客户端希望避免意外创建锁空资源或空锁定资源,可以在LOCK请求中包含"If-Match: *"头,以防止服务器创建新资源。
-
如果LOCK请求创建了资源,并且客户端随后想要使用COPY或MOVE请求覆盖该资源,客户端应该包含"Overwrite: T"头。
-
如果LOCK请求创建了资源,然后客户端决定摆脱该资源,DELETE请求应该在锁空资源上失败,应该使用UNLOCK。但是对于锁定的空资源,UNLOCK不会使资源消失。因此,客户端可能必须尝试两个请求并忽略两个请求之一中的错误。