HTTPQUERY
Bahasa Indonesia

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