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"}]
Mengomentari pertanyaan (2)

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.

Komentar (6)

Dari w3.org

10.4.1 400 Bad Request

permintaan tidak dapat dipahami oleh server karena cacat sintaks. Klien TIDAK HARUS mengulangi permintaan tanpa modifikasi.

Komentar (5)

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:

Kecuali saat menanggapi permintaan HEAD, server HARUS mengirimkan representasi yang berisi penjelasan tentang kesalahan situasi, dan apakah sementara atau permanen kondisi.

Aturan adalah sebagai berikut:

  1. Jika permintaan itu sukses, maka kembali 2xx (kode 3xx untuk mengarahkan). Jika ada sebuah logika internal error pada server, kemudian kembali 5xx. Jika ada sesuatu yang salah dalam permintaan klien, kemudian kembali 4xx kode.
  2. Melihat melalui tersedia kode respon dari kategori yang dipilih. Jika salah satu dari mereka memiliki nama yang sesuai untuk situasi anda, anda dapat menggunakannya. Jika tidak hanya mundur untuk x00 kode (200, 400, 500). Jika anda ragu, mundur ke x00 kode.
  3. Kembali deskripsi kesalahan dalam respon tubuh. Untuk 4xx kode ini harus berisi informasi yang cukup bagi klien pengembang untuk memahami alasan dan memperbaiki klien. Untuk 5xx karena alasan keamanan, tidak ada rincian yang harus diungkapkan.
  4. Jika kebutuhan klien untuk membedakan berbagai kesalahan dan memiliki reaksi yang berbeda, tergantung pada hal itu, menentukan mesin yang dapat dibaca dan dapat diperpanjang kesalahan format dan menggunakannya di mana-mana dalam API. Itu adalah praktik yang baik untuk membuat dari awal.
  5. Perlu diingat bahwa klien pengembang dapat melakukan hal-hal aneh dan mencoba untuk mengurai string yang anda kembali sebagai manusia yang dapat dibaca keterangan. Dan dengan mengubah string anda akan pecah seperti yang ditulis dengan buruk klien. Jadi selalu menyediakan mesin yang dapat dibaca keterangan dan mencoba untuk menghindari pelaporan informasi tambahan dalam bentuk teks.

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:

{
    "error_type" : "unsupported_resource",
    "error_description" : "\"Roman\" is not supported"
}

atau yang lebih generik kesalahan, jika situasi seperti itu adalah buruk kesalahan logika pada klien dan tidak diharapkan, kecuali pengembang membuat sesuatu yang salah:

{
    "error_type" : "malformed_json",
    "error_description" : "\"Roman\" is not supported for \"requestedResource\" field"
}
Komentar (0)

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.

Komentar (3)

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 status 415:

server menolak untuk melayani permintaan karena entitas permintaan dalam format yang tidak didukung oleh sumber daya yang diminta untuk metode yang diminta.

Jika permintaan muatan sintaksis benar, tetapi secara semantik salah, non-standar 422 kode respon dapat digunakan, atau standar 403 status kode:

server memahami permintaan, tetapi menolak untuk memenuhinya. Otorisasi tidak akan membantu dan permintaan TIDAK HARUS diulang.

Komentar (1)

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 atau requestedResource nilai salah dari 400 kesalahan akan sesuai.

Komentar (0)

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.

Komentar (1)

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 punya 400 error pada awalnya.

Misalnya saya punya sebuah variabel javascript,

var formData = {
    "name":"Gearon",
    "hobby":"Be different"
    }; 

Tidak menggunakan variabel formData langsung sebagai nilai kunci data seperti di bawah ini:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: formData,
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

Sebaliknya, menggunakan JSON.stringify untuk merangkum formData seperti di bawah ini:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: JSON.stringify(formData),
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

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.

Komentar (0)