Skip to main content

Appendix 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) 定义。

客户端可以轻松地与支持旧模型 "锁空资源" 和建议模型 "锁定的空资源" 的服务器互操作, 方法是在对未映射 URL 进行 LOCK 后仅尝试 PUT, 而不是 MKCOL 或 GET。

D.1. Guidance for Clients Using LOCK to Create Resources (使用 LOCK 创建资源的客户端指南)

根据本规范实现的 WebDAV 客户端可能会发现创建锁空资源的服务器 (在本规范之前使用 [RFC2518] 实现) 以及创建锁定的空资源的服务器。对 LOCK 请求的响应不会指示创建了哪种资源。有几种技术可以帮助客户端处理任一类型。

  • 如果客户端希望避免意外创建锁空或空锁定资源, 可以在 LOCK 请求中包含 "If-Match: *" 头, 以防止服务器创建新资源。

  • 如果 LOCK 请求创建了一个资源, 并且客户端随后想要使用 COPY 或 MOVE 请求覆盖该资源, 则客户端应包含 "Overwrite: T" 头。

  • 如果 LOCK 请求创建了一个资源, 并且客户端随后决定摆脱该资源, DELETE 请求应该在锁空资源上失败, 应该使用 UNLOCK。但是对于锁定的空资源, UNLOCK 不会使资源消失。因此, 客户端可能必须尝试两个请求并忽略两个请求之一中的错误。