Apa perbedaan antara "Minta Payload" vs "Form Data" seperti yang terlihat di tab Jaringan alat dev Chrome

244

Saya memiliki aplikasi web lama yang harus saya dukung (yang tidak saya tulis).

Ketika saya mengisi formulir dan mengirimkan kemudian periksa tab "Jaringan" di Chrome saya melihat "Minta Payload" di mana saya biasanya melihat "Formulir Data". Apa perbedaan antara keduanya dan kapan satu dikirim dan bukan yang lainnya?

Cari di Google, tetapi tidak benar-benar menemukan info yang menjelaskan hal ini (hanya orang yang mencoba mendapatkan aplikasi javascript untuk mengirim "Formulir Data" alih-alih "Minta Payload".

red888
sumber
Kemungkinan duplikat stackoverflow.com/questions/10494574
lefloh
kemungkinan rangkap dua Apa perbedaan antara data formulir dan permintaan muatan?
SilverlightFox
2
Masih belum mengerti apa perbedaan keduanya. Apakah "Minta Payload" hanya permintaan yang tidak dikodekan dengan tipe?
red888

Jawaban:

274

Permintaan Muatan - atau lebih tepatnya: muatan muatan Permintaan HTTP - adalah data yang biasanya dikirim oleh Permintaan POST atau PUT . Ini bagian setelah header dan CRLFdari Permintaan HTTP .

Permintaan dengan Content-Type: application/jsonmungkin terlihat seperti ini:

POST /some-path HTTP/1.1
Content-Type: application/json

{ "foo" : "bar", "name" : "John" }

Jika Anda mengirimkan ini per AJAX browser hanya menunjukkan kepada Anda apa yang dikirimkan sebagai badan muatan. Hanya itu yang bisa dilakukan karena tidak tahu dari mana data berasal.

Jika Anda mengirimkan Formulir HTML dengan method="POST"dan Content-Type: application/x-www-form-urlencodedatau Content-Type: multipart/form-datapermintaan Anda mungkin terlihat seperti ini:

POST /some-path HTTP/1.1
Content-Type: application/x-www-form-urlencoded

foo=bar&name=John

Dalam hal ini form-data adalah payload permintaan. Di sini Peramban lebih tahu: ia tahu bahwa bilah adalah nilai dari bidang input foo dari formulir yang dikirimkan. Dan itulah yang ditunjukkan kepada Anda.

Jadi, mereka berbeda dalam hal Content-Typetetapi tidak dalam cara data dikirimkan. Dalam kedua kasus, data ada di badan pesan. Dan Chrome membedakan bagaimana data disajikan kepada Anda di Alat Pengembang.

lefloh
sumber
3
Apakah ada alasan untuk memilih satu daripada yang lain dalam hal ukuran dll. Khusus untuk panggilan AJAX yang ringan?
pengguna
@ Buffer maaf, saya tidak mengerti pertanyaan Anda.
lefloh
3
Jika saya mengirim panggilan AJAX, saya bisa mengatur tipe konten menjadi jsonatau x-www-form-urlencoded. Yang pertama mengirimkan data sebagai payload permintaan sementara yang kedua mengkodekannya sebagai permintaan url. Keduanya tampaknya berfungsi dengan baik. Apakah ada alasan untuk memilih salah satu dari mereka? Saya melihat sebagian besar situs web seperti Twitter, Google, Facebook, Stackoverflow menetapkan tipe konten sebagai x-www-form-urlencoded. Ada alasan khusus?
pengguna
2
Ini tidak benar-benar terkait dengan OP tetapi mungkin jawaban ini membantu .
lefloh
13

Di Chrome, permintaan dengan 'Tipe-Konten: aplikasi / json' ditampilkan sebagai Minta PayedLoad dan mengirim data sebagai objek json.

Tetapi permintaan dengan 'Jenis-Konten: application / x-www-form-urlencoded' memperlihatkan Data Formulir dan mengirimkan data sebagai Kunci: Pasangan Nilai , jadi jika Anda memiliki array objek dalam satu kunci, maka akan mengempiskan nilai kunci itu:

{ Id: 1, 
name:'john', 
phones:[{title:'home',number:111111,...},
        {title:'office',number:22222,...}]
}

mengirim

{ Id: 1, 
name:'john', 
phones:[object object]
phones:[object object]
}
Mohammadreza
sumber
PHP itu jahat tentu saja. Popularitas aplikasi / x-www-form-urlencoded ditentukan oleh popularitas PHP.
Brian Haak
4
downvoted karena tidak ada yang namanya "objek json". data json yang dikirim dikirim sebagai string biasa karena json pada dasarnya adalah sebuah string. Anda tentu saja dapat mengubahnya menjadi "objek" standar dengan json_encode tapi itu tidak menjadikannya "objek json" juga.
Volkan Ulukut
Ok, saya pikir javascript objek json template atau hanya objek javascript lebih baik
Mohammadreza
1
Hanya "json" atau jika Anda ingin menekankan jenis "json string" akan baik-baik saja.
Volkan Ulukut