424 Failed Dependency
Penggunaan
Error 424 Failed Dependency merupakan bagian dari Webdav, yang digunakan sebagai sistem file di atas HTTP. Ketika error ini diterima, kodenya muncul di dalam body pesan sebagai bagian dari respons 207 Multi-Status. Ini adalah contoh di mana sebuah respons yang sukses justru memuat indikasi kegagalan.
Klien bertanggung jawab untuk mengurai respons multi-status dan, setelah menemukan error 424 Failed Dependency, menentukan masalahnya serta menyelesaikannya sesuai kebutuhan.
Status ini dijumpai selama aksi PROPPATCH, di mana beberapa properti diubah sekaligus dalam satu permintaan HTTP. Umumnya, sebuah permintaan HTTP berhasil atau gagal sepenuhnya. Jika salah satu properti gagal diatur, seluruh permintaan gagal. Untuk properti yang berhasil diatur sebelum kegagalan tersebut, digunakan status 424 Failed Dependency.
Dampak SEO
Mesin pencari seperti Google tidak akan mengindeks URL dengan status respons 424. URL yang sebelumnya terindeks namun mengembalikan kode status ini akan dihapus dari hasil pencarian.
Contoh
Klien mengirimkan permintaan untuk memperbarui nomor kursi dan nama pada sebuah catatan pendaftaran konferensi. Setelah pendaftaran awal, kursi dapat ditambah, dihapus, atau diubah. Perubahan terhadap nama tidak diizinkan. Karena perubahan nama ditolak dengan 403 Forbidden, seluruh permintaan ditolak, yang berarti pembaruan pengaturan tempat duduk tidak terlaksana.
Permintaan
PROPPATCH /update.html HTTP/1.1
Host: example.com
Content-Type: application/xml; charset="utf-8"
Content-Length: 305
<?xml version="1.0" encoding="utf-8" ?>
<d:propertyupdate xmlns:d="DAV:"
xmlns:z="urn:example">
<d:set>
<d:prop>
<z:seats>
<z:seatnumber>100</z:seatnumber>
<z:seatnumber>101</z:seatnumber>
</z:seats>
</d:prop>
<d:prop>
<d:name>Smith</d:name>
</d:prop>
</d:set>
</d:propertyupdate>
Respons
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: 528
<?xml version="1.0" encoding="utf-8" ?>
<d:multistatus xmlns:d="DAV:"
xmlns:z="urn:example">
<d:response>
<d:href>
http://example.com/registrants/update.html
</d:href>
<d:propstat>
<d:prop><z:seats/></d:prop>
<d:status>
HTTP/1.1 424 Failed Dependency
</d:status>
</d:propstat>
<d:propstat>
<d:prop><z:name/></d:prop>
<d:status>HTTP/1.1 403 Forbidden</d:status>
</d:propstat>
<d:responsedescription>
The name of the registrant is not modifiable.
</d:responsedescription>
</d:response>
</d:multistatus>
Cara memperbaiki
Urai body respons 207 Multi-Status dan temukan sub-permintaan yang memiliki kode kegagalan selain 424. Entri 424 merupakan kegagalan beruntun. Akar penyebabnya adalah operasi dengan error berbeda seperti 403, 409, atau 423.
Perbaiki terlebih dahulu operasi yang menjadi akar penyebab. Dalam permintaan PROPPATCH, satu pembaruan properti yang gagal dengan 403 Forbidden menyebabkan semua pembaruan properti lain dalam permintaan yang sama gagal dengan 424. Selesaikan properti yang terlarang tersebut (hapus field yang bermasalah atau perbaiki izinnya), lalu ulangi seluruh PROPPATCH.
Periksa adanya lock pada sumber daya. Status 423 Locked pada satu sub-permintaan merembet sebagai 424 ke setiap operasi lain dalam batch tersebut. Buka lock sumber daya atau sertakan lock token yang benar pada header If sebelum mencoba lagi.
Urutan berpengaruh pada sebagian implementasi Webdav. Tempatkan operasi yang independen terlebih dahulu dan yang saling bergantung di akhir, sehingga kegagalan parsial memengaruhi lebih sedikit item.
Pecah permintaan batch yang besar menjadi kelompok-kelompok kecil saat melakukan debugging. Mengisolasi operasi satu per satu membuat dependensi yang benar-benar gagal terlihat jelas tanpa perlu mengurai respons multi-status yang kompleks.
Di sisi server, kembalikan pesan error yang deskriptif pada setiap elemen <d:responsedescription> agar klien dapat mengidentifikasi properti atau sumber daya yang gagal tanpa menebak-nebak.
Referensi kode
.NET
HttpStatusCode.FailedDependency
Rust
http::StatusCode::FAILED_DEPENDENCY
Rails
:failed_dependency
Go
http.StatusFailedDependency
Symfony
Response::HTTP_FAILED_DEPENDENCY
Python3.5+
http.HTTPStatus.FAILED_DEPENDENCY
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_FAILED_DEPENDENCY
Angular
@angular/common/http/HttpStatusCode.FailedDependency