423 Locked
Penggunaan
Error 423 Locked merupakan bagian dari Webdav, yang digunakan sebagai sistem file di atas HTTP. Klien memiliki opsi untuk melakukan LOCK atau UNLOCK pada file, dan jika sebuah klien mencoba memodifikasi sumber daya yang terkunci, inilah error yang dikembalikan oleh server.
Ketika sebuah kunci pertama kali diberikan oleh server, header respons Lock-Token dikirim ke klien, yang nantinya dapat digunakan untuk membuka kunci sumber daya tersebut atau memperbarui masa berlaku kuncinya.
Sebagai bagian dari respons, server menyertakan kode precondition atau post-condition yang sesuai untuk membantu memandu klien. Kode tersebut dapat berupa lock-token-submitted atau no-conflicting-lock.
Di luar Webdav, beberapa platform menggunakan kembali 423 untuk menandakan penguncian pada tingkat akun. API Shopify mengembalikan 423 Locked ketika sebuah toko terkunci akibat pelanggaran batas laju API yang berulang atau adanya tagihan akun yang belum dibayar. Pemilik toko harus menyelesaikan masalah tersebut melalui partner dashboard Shopify sebelum akses API dipulihkan. Penggunaan ini tidak ada hubungannya dengan penguncian file.
Dampak SEO
Mesin pencari seperti Google tidak akan mengindeks URL dengan status respons 423 Locked. URL yang sebelumnya terindeks dan mengembalikan status code ini akan dihapus dari hasil pencarian.
Contoh
Klien mencoba mengunggah sebuah file ke folder target. Folder tersebut terkunci, sehingga operasi itu tidak diizinkan dan error 423 Locked dikembalikan. Pada permintaan berikutnya, klien meminta agar sumber daya tersebut dibuka kuncinya dengan menyertakan Lock-Token sebagai bagian dari header permintaan If.
Permintaan itu berhasil karena saat itu hanya ada satu kunci pada folder tersebut. UNLOCK yang berhasil hanya berarti kunci yang dirujuk oleh Lock-Token yang ditentukan telah dihapus. Kunci lain tetap berlaku dan akan mengembalikan 423 Locked lagi.
Permintaan awal
PUT /documents/ HTTP/1.1
Host: example.com
Content-Type: application/pdf
Content-Length: 10000
<PDF file transferred>
Respons awal
HTTP/1.1 423 Locked
Content-Type: application/xml
Content-Length: 163
<?xml version="1.0" encoding="utf-8" ?>
<d:error xmlns:d="DAV:">
<d:lock-token-submitted>
<d:href>/documents/</d:href>
</d:lock-token-submitted>
</d:error>
Permintaan kedua, yang menyertakan permintaan unlock
PUT /documents/ HTTP/1.1
Host: example.com
Content-Type: application/pdf
Content-Length: 10000
If: (<urn:uuid:123…789>)
<PDF file transferred>
Respons akhir
HTTP/1.1 204 No Content
Cara memperbaiki
Periksa body respons untuk menemukan kode precondition. Error lock-token-submitted berarti permintaan tidak menyertakan lock token yang diperlukan. Error no-conflicting-lock berarti ada kunci lain yang menghalangi akses.
Jika kunci tersebut milik sesi klien yang sama, sertakan nilai Lock-Token pada header permintaan If dan kirim ulang permintaannya. Server akan memvalidasi token tersebut dan mengizinkan modifikasi.
Jika kunci dipegang oleh pengguna atau proses lain, tunggu hingga kunci kedaluwarsa atau hubungi pemilik kunci. Timeout kunci dapat dikonfigurasi pada server Webdav. Tinjau nilai header Timeout yang dikembalikan saat kunci pertama kali diberikan untuk menentukan berapa lama kunci tersebut bertahan.
Pada lingkungan SharePoint dan Office Online, file yang dikunci oleh aplikasi desktop tetap terkunci sampai aplikasi tersebut ditutup atau timeout yang dapat dikonfigurasi terlampaui. Administrator dapat melepaskan kunci basi melalui antarmuka manajemen SharePoint.
Kirim permintaan UNLOCK dengan Lock-Token yang cocok untuk melepaskan kunci secara eksplisit. Unlock yang berhasil hanya menghapus kunci yang ditentukan. Kunci lain pada sumber daya yang sama tetap aktif dan terus memicu error ini.
Di sisi server, tetapkan timeout kunci yang wajar agar kunci yang ditinggalkan tidak memblokir klien lain tanpa batas waktu. Spesifikasi WebDAV merekomendasikan agar server menerapkan batas timeout alih-alih memberikan kunci tanpa batas.
Untuk konsumen API Shopify, 423 berarti tokonya sendiri yang terkunci. Selesaikan tagihan yang belum dibayar melalui partner dashboard atau hubungi dukungan Shopify untuk memulihkan akses API.
Referensi kode
.NET
HttpStatusCode.Locked
Rust
http::StatusCode::LOCKED
Rails
:locked
Go
http.StatusLocked
Symfony
Response::HTTP_LOCKED
Python3.5+
http.HTTPStatus.LOCKED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_LOCKED
Angular
@angular/common/http/HttpStatusCode.Locked