HTTPQUERY
Español

207 Multi-Status

Uso

Una respuesta 207 Multi-Status llega cuando una sola solicitud HTTP afecta a varios recursos. Por ejemplo, una solicitud POST que actualiza varias bases de datos puede tener éxito en unas y fallar en otras. El cuerpo de la respuesta enumera los resultados individuales de cada recurso.

De forma predeterminada, el cuerpo es un documento XML con un elemento raíz multistatus. El cliente analiza cada nodo para determinar el resultado de cada suboperación.

El elemento raíz contiene cero o más elementos response en cualquier orden. Cada response incluye un elemento href que identifica el recurso de destino. Existen dos formatos: el estado se refiere al recurso en su conjunto o a propiedades concretas del recurso.

WebDAV

El código de estado 207 Multi-Status lo utiliza principalmente WebDAV. Los clientes HTTP estándar rara vez encuentran esta respuesta fuera de los flujos de trabajo de WebDAV.

Estado del recurso en su conjunto

Un elemento hijo status contiene el código de estado HTTP resultante para el recurso identificado. Se espera que los clientes gestionen los códigos de estado HTTP estándar que aparezcan ahí.

<d:response>
  <d:href>http://example.re/tasks</d:href>
  <d:status>HTTP/1.1 200 OK</d:status>
</d:response>

Estado de propiedades individuales

Los métodos PROPFIND y PROPPATCH usan propstat en lugar de status para informar sobre propiedades individuales de un recurso.

<d:response>
  <d:href>http://example.re/tasks</d:href>
  <d:propstat>
    <d:prop>
      <d:getcontentlanguage>
        "en-CA"
      </d:getcontentlanguage>
    </d:prop>
    <d:status>HTTP/1.1 200 OK</d:status>
  </d:propstat>
</d:response>

Indicación de éxito o fallo

Una respuesta 207 Multi-Status señala un éxito global, un fallo global o una mezcla de ambos. El cliente examina cada elemento response para evaluar hasta qué punto se completó la operación.

Ejemplo

El cliente envía datos XML al servidor. Intervienen tres recursos independientes y el servidor devuelve resultados individuales para cada uno.

Los dos primeros recursos tienen éxito: el primero no devuelve cuerpo (204) y el segundo confirma que se creó un recurso nuevo (201). El tercer recurso informa de un error 423 porque hay un bloqueo activo. El cliente determina si la operación global tuvo éxito o falló a partir de estos códigos individuales.

Solicitud

POST /signup HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 93

<?xml version="1.0"?>
<person>
  <name>David Smith</name>
  <country>USA</country>
</person>

Respuesta

HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: 568

<?xml version="1.0" encoding="utf-8" ?>
<d:multistatus xmlns:d="DAV:">
  <d:response>
    <d:href>http://example.re/signup/r1</d:href>
    <d:status>HTTP/1.1 204 No Content</d:status>
  </d:response>
  <d:response>
    <d:href>http://example.re/signup/r2</d:href>
    <d:status>HTTP/1.1 201 Created</d:status>
  </d:response>
  <d:response>
    <d:href>http://example.re/signup/r3</d:href>
    <d:status>HTTP/1.1 423 Locked</d:status>
    <d:error><d:lock-token-submitted/></d:error>
  </d:response>
</d:multistatus>

Referencias de código

.NET

HttpStatusCode.MultiStatus

Rust

http::StatusCode::MULTI_STATUS

Rails

:multi_status

Go

http.StatusMultiStatus

Symfony

Response::HTTP_MULTI_STATUS

Python3.5+

http.HTTPStatus.MULTI_STATUS

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_MULTI_STATUS

Angular

@angular/common/http/HttpStatusCode.MultiStatus