HTTPQUERY
Français

207 Multi-Status

Utilisation

Une réponse 207 Multi-Status survient lorsqu’une seule requête HTTP touche plusieurs ressources. Par exemple, une requête POST mettant à jour plusieurs bases de données peut réussir sur certaines et échouer sur d’autres. Le corps de la réponse énumère les résultats individuels pour chaque ressource.

Par défaut, le corps est un document XML dont l’élément racine est multistatus. Le client analyse chaque nœud pour déterminer l’issue de chaque sous-opération.

L’élément racine contient zéro ou plusieurs éléments response, dans un ordre quelconque. Chaque response inclut un élément href identifiant la ressource cible. Deux formats existent : le statut porte soit sur la ressource dans son ensemble, soit sur des propriétés particulières de la ressource.

WebDAV

Le code de statut 207 Multi-Status est principalement utilisé par WebDAV. Les clients HTTP standards rencontrent rarement cette réponse en dehors des flux de travail WebDAV.

Statut de la ressource dans son ensemble

Un élément enfant status contient le code de statut HTTP résultant pour la ressource identifiée. Les clients sont censés traiter les codes de statut HTTP standards qui y figurent.

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

Statut des propriétés individuelles

Les méthodes PROPFIND et PROPPATCH utilisent propstat à la place de status pour rendre compte des propriétés individuelles d’une ressource.

<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>

Indication de succès ou d’échec

Une réponse 207 Multi-Status signale un succès global, un échec global, ou un mélange des deux. Le client examine chaque élément response pour évaluer le degré d’achèvement de l’opération.

Exemple

Le client envoie des données XML au serveur. Trois ressources indépendantes sont concernées, et le serveur renvoie un résultat distinct pour chacune.

Les deux premières ressources réussissent : la première ne renvoie aucun corps (204) et la seconde confirme la création d’une nouvelle ressource (201). La troisième ressource signale une erreur 423 parce qu’un verrou est posé. Le client détermine si l’opération globale a réussi ou échoué à partir de ces codes individuels.

Requête

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>

Réponse

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>

Références de code

.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