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