HTTPQUERY
Deutsch

207 Multi-Status

Verwendung

Eine 207-Multi-Status-Antwort trifft ein, wenn eine einzelne HTTP-Anfrage mehrere Ressourcen betrifft. Beispielsweise kann eine POST-Anfrage, die mehrere Datenbanken aktualisiert, bei einigen erfolgreich sein und bei anderen fehlschlagen. Der Antwortrumpf listet die einzelnen Ergebnisse für jede Ressource auf.

Standardmäßig ist der Rumpf ein XML-Dokument mit dem Wurzelelement multistatus. Der Client parst jeden Knoten, um das Ergebnis jeder Teiloperation zu bestimmen.

Das Wurzelelement enthält null oder mehr response-Elemente in beliebiger Reihenfolge. Jedes response enthält ein href-Element, das die Zielressource identifiziert. Es existieren zwei Formate: Der Status bezieht sich entweder auf die Ressource als Ganzes oder auf bestimmte Eigenschaften der Ressource.

WebDAV

Der Statuscode 207 Multi-Status wird vorwiegend von WebDAV verwendet. Standard-HTTP-Clients begegnen dieser Antwort außerhalb von WebDAV-Abläufen nur selten.

Status der Ressource als Ganzes

Ein untergeordnetes status-Element enthält den resultierenden HTTP-Statuscode für die bezeichnete Ressource. Von Clients wird erwartet, dass sie die hier auftretenden Standard-HTTP-Statuscodes verarbeiten.

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

Status einzelner Eigenschaften

Die Methoden PROPFIND und PROPPATCH verwenden propstat anstelle von status, um über einzelne Eigenschaften einer Ressource zu berichten.

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

Erfolgs- oder Fehlerkennzeichnung

Eine 207-Multi-Status-Antwort signalisiert vollständigen Erfolg, vollständiges Scheitern oder eine Mischung aus beidem. Der Client prüft jedes response-Element, um die Vollständigkeit der Operation zu beurteilen.

Beispiel

Der Client sendet XML-Daten per POST an den Server. Drei voneinander unabhängige Ressourcen sind beteiligt, und der Server gibt für jede einzelne ein eigenes Ergebnis zurück.

Die ersten beiden Ressourcen sind erfolgreich: Die erste gibt keinen Rumpf zurück (204), die zweite bestätigt, dass eine neue Ressource erstellt wurde (201). Die dritte Ressource meldet einen 423-Fehler, weil eine Sperre gehalten wird. Anhand dieser einzelnen Codes entscheidet der Client, ob die Gesamtoperation erfolgreich war oder fehlgeschlagen ist.

Anfrage

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>

Antwort

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>

Code-Referenzen

.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