Lebih
400 BAD request HTTP error code yang berarti?
Saya memiliki JSON permintaan yang saya'm postingan URL HTTP.
Hal ini harus diperlakukan sebagai 400
di mana requestedResource
lapangan ada tapi "Roman"
adalah nilai yang tidak valid untuk bidang ini?
[{requestedResource:"Roman"}]
Hal ini harus diperlakukan sebagai 400
di mana "bla"
bidang doesn't ada sama sekali?
[{blah:"Roman"}]
332
8
400 berarti bahwa permintaan itu rusak. Dengan kata lain, aliran data yang dikirim oleh client ke server didn't mengikuti aturan.
Dalam kasus REST API dengan JSON muatan, 400's biasanya, dan benar saya akan mengatakan, yang digunakan untuk menunjukkan bahwa JSON adalah tidak valid dalam beberapa cara sesuai dengan spesifikasi API untuk layanan.
Dengan logika itu, kedua skenario yang anda berikan harus 400's.
Bayangkan bukan ini yang XML daripada JSON. Dalam kedua kasus, XML tidak akan pernah lulus validasi skema--baik karena undefined unsur atau elemen yang tidak tepat nilai. Itu akan menjadi sebuah permintaan buruk. Kesepakatan yang sama di sini.
Dari w3.org
Memilih kode respon HTTP ini cukup mudah dan dapat digambarkan dengan aturan sederhana. Satu-satunya yang rumit bagian yang sering dilupakan adalah ayat 6.5 dari RFC 7231:
Aturan adalah sebagai berikut:
Jadi pada kasus anda, saya'a kembali 400 kesalahan dan sesuatu seperti ini jika "Roman" diperoleh dari input user dan klien harus memiliki reaksi spesifik:
atau yang lebih generik kesalahan, jika situasi seperti itu adalah buruk kesalahan logika pada klien dan tidak diharapkan, kecuali pengembang membuat sesuatu yang salah:
Dalam kedua kasus adalah "sintaks ping". It's semantik yang salah. Oleh karena itu, IMHO 400 adalah tidak pantas. Sebaliknya, itu akan sesuai untuk kembali 200 bersama dengan beberapa jenis kesalahan objek seperti
{ "kesalahan": { "pesan": "tidak Diketahui permintaan kata kunci" } }
atau apa pun.Mempertimbangkan klien pengolahan path(s). Kesalahan dalam sintaks (misalnya tidak valid JSON) adalah sebuah kesalahan dalam logika program, dengan kata lain sebuah bug dari beberapa macam, dan harus ditangani dengan demikian, dalam cara yang mirip dengan 403, mengatakan; dalam kata lain, sesuatu yang buruk telah terjadi.
Kesalahan dalam parameter nilai, di sisi lain, kesalahan semantik, mungkin karena mengatakan buruk divalidasi input pengguna. Itu bukan sebuah kesalahan HTTP (meskipun saya kira itu bisa menjadi 422). Pengolahan jalan akan berbeda.
Misalnya, dalam jQuery, aku akan memilih untuk tidak harus menulis satu error handler yang berhubungan dengan hal-hal seperti 500 dan beberapa aplikasi-spesifik kesalahan semantik. Framework lain, Ember untuk satu, juga mengobati HTTP kesalahan seperti yang 400 dan 500-an identik sebagai lemak besar kegagalan, membutuhkan programmer untuk mendeteksi apa yang's terjadi dan cabang tergantung pada apakah itu's "nyata" kesalahan atau tidak.
Menggunakan
400
kode status untuk tujuan lain dari yang menunjukkan bahwa permintaan ping adalah jelas salah.Jika permintaan muatan berisi byte-urutan yang tidak dapat diuraikan sebagai
application/json
(jika server mengharapkan bahwa dataformat), sesuai kode status415
:Jika permintaan muatan sintaksis benar, tetapi secara semantik salah, non-standar
422
kode respon dapat digunakan, atau standar403
status kode:Berpikir tentang harapan.
Sebagai aplikasi klien, anda berharap untuk tahu jika ada sesuatu yang tidak beres pada sisi server. Jika kebutuhan server untuk melempar kesalahan ketika
blah
hilang ataurequestedResource
nilai salah dari 400 kesalahan akan sesuai.Cek dulu URL itu mungkin salah, jika hal ini benar maka periksa permintaan tubuh yang anda kirim, kemungkinan penyebabnya adalah permintaan yang dikirim hilang sintaks yang tepat.
Untuk menguraikan , cek untuk karakter khusus dalam permintaan string. Jika hal ini (khusus char) yang digunakan ini adalah akar penyebab dari kesalahan ini.
cobalah menyalin permintaan dan menganalisis masing-masing dan setiap kategori data.
Sebagai pelengkap, bagi mereka yang mungkin menemui masalah yang sama seperti saya, saya'm menggunakan
$.ajax
untuk mengirim data formulir ke server dan saya juga punya400
error pada awalnya.Misalnya saya punya sebuah variabel javascript,
Tidak menggunakan variabel
formData
langsung sebagai nilai kuncidata
seperti di bawah ini:Sebaliknya, menggunakan JSON.stringify untuk merangkum
formData
seperti di bawah ini:Lagi pula, sebagai orang lain telah digambarkan, kesalahan karena server tidak bisa mengenali permintaan menyebabkan kesalahan syntax, I'm hanya mengangkat sebuah contoh praktek. Harapan itu akan sangat membantu untuk seseorang.