Skip to main content

13. Multi-Status Response (多状态响应)

13. Multi-Status Response (多状态响应)

Multi-Status 响应在可能需要多个状态码的情况下传递关于多个资源的信息。默认的 Multi-Status 响应体是一个 text/xml 或 application/xml HTTP 实体, 具有 'multistatus' 根元素。其他元素包含在方法调用期间生成的 200、300、400 和 500 系列状态码。100 系列状态码不应该记录在 'response' XML 元素中。

尽管 '207' 被用作整体响应状态码, 接收者需要查阅 multistatus 响应体的内容以获取关于方法执行成功或失败的更多信息。该响应可以用于成功、部分成功以及失败情况。

'multistatus' 根元素以任意顺序保存零个或多个 'response' 元素, 每个元素包含关于单个资源的信息。每个 'response' 元素必须具有一个 'href' 元素来标识资源。

Multi-Status 响应使用两种不同格式之一来表示状态:

  1. 作为 'response' 元素子元素的 'status' 元素指示整个已标识资源的消息执行状态 (例如, 参见第 9.6.2 节)。某些方法定义提供了关于客户端应准备在响应中看到的特定状态码的信息。但是, 客户端必须能够处理其他状态码, 使用 [RFC2616] 第 10 节中定义的通用规则。

  2. 对于 PROPFIND 和 PROPPATCH, 格式已使用 'propstat' 元素而不是 'status' 进行扩展, 提供关于资源各个属性的信息。此格式特定于 PROPFIND 和 PROPPATCH, 并在第 9.1 节和第 9.2 节中详细描述。

13.1. Response Headers (响应头)

HTTP 定义了 Location 头来指示在 Request-URI 中寻址的资源的首选 URL (例如, 响应成功的 PUT 请求或重定向响应)。但是, 当响应体中有 URL 时 (如 Multi-Status), 使用此头会产生歧义。因此, Location 头与 Multi-Status 响应的使用是有意未定义的。

13.2. Handling Redirected Child Resources (处理重定向的子资源)

HTTP 1.1 中定义的重定向响应 (300-303、305 和 307) 通常采用 Location 头来指示从 Request-URI 重定向的单个资源的新 URI。Multi-Status 响应包含许多资源地址, 但 [RFC2518] 中的原始定义没有为服务器提供重定向资源的新 URI 的任何位置。本规范确实为此信息定义了一个 'location' 元素 (参见第 14.9 节)。服务器必须在 Multi-Status 中的重定向响应中使用此新元素。

在 Multi-Status 中遇到重定向资源的客户端绝对不能依赖 'location' 元素存在新 URI。如果该元素不存在, 客户端可以向单个重定向资源重新发出请求, 因为对该请求的响应可以使用包含新 URI 的 Location 头进行重定向。

13.3. Internal Status Codes (内部状态码)

第 9.2.1、9.1.2、9.6.1、9.8.3 和 9.9.2 节定义了在 Multi-Status 响应中使用的各种状态码。本规范不定义可能出现在这些响应中的其他状态码的含义。