附录 F. 相比 RFC 2518 的变更摘要
本节列出了本文档与 RFC 2518 之间的主要变更,尤其是那些可能导致实现更改的内容。服务器将通过在 DAV 响应标头中返回兼容级别“3”来通告对本规范中所有更改的支持(请参见 10.1 和 18.3 节)。
F.1 客户端和服务器实现的更改
集合和命名空间操作
- PROPFIND'allprop'(第 9.1 节)的语义已放宽,以便服务器返回的结果至少包括本规范中定义的活属性,但不一定返回其他活属性。因此,“allprop”指令的含义更像是“返回请求'allprop'时应返回的所有属性”,这是一组属性,其中可能包括自定义属性和其他规范中定义的属性(如果其他规范要求)。与此相关的是,'allprop'请求现在可以使用'include'语法进行扩展,以包括特定的命名属性,从而避免了由于'allprop'语义改变而导致的其他请求。
- 现在允许服务器拒绝 Depth:Infinity 的 PROPFIND 请求。使用此方法的客户端将需要能够执行一系列“Depth:1”的请求。
- 现在多状态响应主体可以在新的“location”元素中传输 HTTP 的 Location 响应标头的值。当存在带有 3xx 状态的“response”元素时,客户端可以使用它来避免到服务器的额外往返(请参阅第 14.24 节)。
- COPY 的定义已经放宽,因此不再需要服务器先删除目标资源(这是与[RFC3253]的不兼容)。请参阅第 9.8 节。
标头和编组
- 现在,“Destination”和“If”请求标头除了允许完整的 URI 外,还允许使用绝对路径(请参见第 8.3 节)。这对于通过反向代理运行的客户端很有用,因为反向代理可能只重写了主机请求标头,但没有重写 WebDAV 特定的标头。
- 本规范采用错误编组扩展和[RFC3253]中定义的“前提条件/后置条件”术语(请参见第 16 节)。与此相关的是,它在多状态响应主体中添加了“error”XML 元素(请参阅第 14.5 节,但是请注意,它使用的格式与 RFC 3253 中建议的格式不同)。
- 现在要求发送者和接收者在 XML 消息正文中支持 UTF-16 字符编码(请参见第 19 节)。
- 现在要求客户端在 PROPFIND 请求上发送 Depth 标头,尽管仍然鼓励服务器去支持那些不支持的客户端。
锁定
- RFC 2518 的“lock-null resources”(LNRs)概念已由一种简化的方法“locked empty resources”取代(请参见 7.3 节)。lock-null 的资源的客户端在某些方面不再可靠,具体说就是,用它们来创建锁定集合的能力,或者在没有发出 PUT 或 MKCOL 请求时就发出 UNLOCK 会导致 lock-null 资源消失的事实。请注意,根据 RFC 2518,仍然允许服务器实现 LNR。
- 不再隐式刷新锁。仅在明确请求时才刷新锁(请参见第 9.10.2 节)。
- 阐明了 LOCK 请求中提供的 DAV:owner 值必须像死属性一样由服务器保留(第 14.17 节)。还添加了 DAV:lockroot 元素(第 14.12 节),该元素允许客户端发现锁根。
F.2 服务器实现的更改
集合和命名空间操作
- 由于互操作性问题,多状态响应中“href”元素的内容允许的格式受到限制(请参见第 8.3 节)。
- 由于缺乏实施,已删除了对 COPY 和 MOVE 的“propertybehavior”请求主体的支持。取而代之的是,预留属性的要求被声明(请参阅第 9.8 节和第 9.9 节)。
属性
- 增强了服务器对属性值存储的要求,尤其是语言信息(xml:lang),空格和 XML 名称空间等信息的持久性保存(请参见第 4.3 节)。
- 声明了在什么要求下属性应该是对于客户端可写的;特别是服务器应支持设置“DAV:displayname”(请参阅第 15 节)。
- 作为 DAV:getlastmodified 的值,仅'rfc1123-date'格式是合法的(请参阅第 15.7 节)。
标头和编组
- 现在要求服务器在处理条件标头之前进行授权检查(请参见 8.5 节)。
锁定
- 加强了在访问锁定资源时检查锁定创建者身份的要求(请参阅第 6.4 节)。客户端应该意识到,把锁令牌返回给其他主体只会损坏这个锁。
- [RFC2518]的 8.10.4 节错误地要求服务器在真正适合 207 状态的地方却返回 409 状态。此问题已得到纠正(第 9.10 节)。
F.3 其他变更
结合属性的定义已经被修复,因此不会再因 Request-URI 而不同(请参见 5.2 节)。
由于缺乏实际使用,[RFC2518] 4.6 节中引入的 DAV:source 属性已被删除。
DAV 标头现在除了兼容性级别之外,还允许通过 URI 进行非 IETF 扩展。现在,它也可以在请求中使用,尽管该规范并未为此处定义的兼容性级别定义任何关联的语义(请参见 10.1 节)。
在 RFC2518 中,Depth 标头的定义(第 9.2 节)要求,默认情况下,请求中的所有标头将应用于范围内的每个资源。根据实施经验,默认设置现已撤销(请参见第 10.2 节)。
由于缺乏实现,已删除了 HTTP 状态代码 102([RFC2518],第 10.1 节)和 Status-URI 响应标头(第 9.7 节)的定义。
Timeout 请求标头中使用的 TimeType 格式和 XML 元素中的“timeout”曾经是可扩展的。现在,仅允许使用本规范定义的两种格式(请参见 10.7 节)。