Skip to content

附录 B. HTTP 客户端兼容性

WebDAV 旨在且已经做到对 HTTP 1.1 向后兼容。PUT 和 DELETE 方法是在 HTTP 中定义的,因此可以由 HTTP 客户端以及支持 WebDAV 的客户端使用,但是在本规范中对 PUT 和 DELETE 的响应已扩展为仅为 WebDAV 客户端完全准备。关于这些响应是否会导致仅支持 HTTP 的客户端的互操作性问题,引起了一些理论上的关注,本节将解决这些关注。

由于任何 HTTP 客户端都应将无法识别的 400 级和 500 级状态代码视为错误,因此以下新状态代码不应出现任何问题:422、423 和 507(424 也是新状态代码,但它仅出现在 207 多状态响应的正文中)因此,例如,如果 HTTP 客户端尝试 PUT 或 DELETE 锁定的资源,则 423(锁定)的响应应导致向用户呈现一般错误。

207 Multistatus 响应很有趣,因为向客户端发出对集合的 DELETE 请求的 HTTP 客户端可能会将 207 响应解释为成功,即使它没有意识到资源是个集合并且无法理解 DELETE 操作可能已经完成或部分失败。这种解释并不完全合理,因为 200 级响应只是表明服务器“已接收,理解并接受”该请求,而非该请求已经完全成功。

一种选择是服务器可以将对集合的 DELETE 视为原子操作,并在成功的情况下使用 204 No Content,或者对错误使用某种适当的错误响应(400 或 500 级别)。实际上,这种方法将使向后兼容性最大化。但是,由于互操作性测试和工作组讨论尚未发现 HTTP 客户端针对 WebDAV 集合发出 DELETE 请求的任何实例,因此这种关注还是更多的停留在理论上。因此,即使服务器将任何集合 DELETE 请求视为 WebDAV 请求并发送 207 Multi-Status 响应,服务器也可能在与 HTTP 客户端进行互操作时完全成功。

通常来说,面对这种情况,我们鼓励服务器使用本文档中定义的详细响应和其他机制来应对,而不是为理论上的互操作性问题进行逻辑更改。