207 Multi-Status
Penggunaan
Respons 207 Multi-Status muncul ketika satu permintaan HTTP menyentuh beberapa sumber daya sekaligus. Sebagai contoh, permintaan POST yang memperbarui beberapa basis data bisa saja berhasil pada sebagian dan gagal pada sebagian lainnya. Badan respons mencantumkan hasil masing-masing sumber daya.
Secara bawaan, badan respons berupa dokumen XML dengan elemen akar multistatus. Klien mengurai setiap simpul untuk menentukan hasil dari setiap sub-operasi.
Elemen akar memuat nol atau lebih elemen response dalam urutan apa pun. Setiap response menyertakan elemen href yang mengidentifikasi sumber daya target. Ada dua format: status mengacu pada sumber daya secara keseluruhan, atau pada properti tertentu dari sumber daya tersebut.
WebDAV
Kode status 207 Multi-Status terutama digunakan oleh WebDAV. Klien HTTP standar jarang menemui respons ini di luar alur kerja WebDAV.
Status sumber daya secara keseluruhan
Elemen anak status memuat kode status HTTP hasil untuk sumber daya yang diidentifikasi. Klien diharapkan menangani kode status HTTP standar yang ditemukan di sini.
<d:response>
<d:href>http://example.re/tasks</d:href>
<d:status>HTTP/1.1 200 OK</d:status>
</d:response>
Status properti individual
Metode PROPFIND dan PROPPATCH menggunakan propstat sebagai pengganti status untuk melaporkan properti individual sebuah sumber daya.
<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>
Indikasi keberhasilan atau kegagalan
Respons 207 Multi-Status menandakan keberhasilan menyeluruh, kegagalan menyeluruh, atau campuran keduanya. Klien memeriksa setiap elemen response untuk menilai kelengkapan operasi.
Contoh
Klien mengirimkan data XML ke server. Tiga sumber daya independen terlibat, dan server mengembalikan hasil tersendiri untuk masing-masing.
Dua sumber daya pertama berhasil: yang pertama tidak mengembalikan badan (204) dan yang kedua memastikan sebuah sumber daya baru telah dibuat (201). Sumber daya ketiga melaporkan error 423 karena ada kunci yang sedang dipegang. Klien menentukan apakah operasi secara keseluruhan berhasil atau gagal berdasarkan kode-kode individual ini.
Permintaan
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>
Respons
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>
Referensi kode
.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