Saya ingin bertanya tentang multipart/form-data
. Di header HTTP, saya menemukan bahwa Content-Type: multipart/form-data; boundary=???
.
Apakah ???
kebebasan ditentukan oleh pengguna? Atau itu dihasilkan dari HTML? Apakah mungkin bagi saya untuk mendefinisikannya ??? = abcdefg
?
Jawaban:
Iya.
No HTML memiliki apa-apa hubungannya dengan itu. Baca di bawah.
Iya.
Jika Anda ingin mengirim data berikut ke server web:
menggunakan
application/x-www-form-urlencoded
akan seperti ini:Seperti yang Anda lihat, server tahu bahwa parameter dipisahkan oleh ampersand
&
. Jika&
diperlukan untuk nilai parameter maka harus dikodekan.Jadi, bagaimana server tahu di mana nilai parameter dimulai dan berakhir ketika menerima permintaan HTTP menggunakan
multipart/form-data
?Menggunakan batas , mirip dengan
&
.Sebagai contoh:
Dalam hal ini, nilai batasnya adalah
XXX
. Anda menentukannya diContent-Type
header sehingga server tahu cara membagi data yang diterimanya.Jadi, Anda perlu:
Gunakan nilai yang tidak akan muncul dalam data HTTP yang dikirim ke server.
Konsisten dan gunakan nilai yang sama di mana saja dalam pesan permintaan.
sumber
Jawaban tepat untuk pertanyaan adalah: ya, Anda dapat menggunakan nilai arbitrer untuk
boundary
parameter , mengingat parameter tidak melebihi panjang 70 byte dan hanya terdiri dari karakter 7-bitUS-ASCII
(dapat dicetak).Jika Anda menggunakan salah satu
multipart/*
jenis konten, Anda sebenarnya harus menentukanboundary
parameter diContent-Type
header, jika tidak server (dalam hal permintaan HTTP) tidak akan dapat mengurai muatan.Anda mungkin juga ingin mengatur
charset
parameter keUTF-8
dalamContent-Type
header Anda , kecuali Anda dapat benar - benar yakin bahwa hanyaUS-ASCII
rangkaian karakter yang akan digunakan dalam data payload.Beberapa kutipan yang relevan dari RFC2046 :
4.1.2. Parameter Charset:
5.1. Jenis Media Multipart
Berikut adalah contoh menggunakan batas arbitrer:
sumber
multipart / form-data berisi batas untuk memisahkan pasangan nama / nilai. Batas bertindak seperti penanda setiap potongan pasangan nama / nilai yang disahkan ketika suatu formulir dikirimkan. Batas secara otomatis ditambahkan ke jenis konten tajuk permintaan.
Formulir dengan atribut enctype = "multipart / form-data" akan memiliki header permintaan Content-Type: multipart / form-data; batas --- WebKit193844043-h ( browser menghasilkan vaue ).
Payload yang dilewati terlihat seperti ini:
Di sisi layanan web, ia dikonsumsi dalam bentuk @Consumes ("multipart / form-data").
Hati-hati, saat menguji layanan web Anda menggunakan tukang pos chrome, Anda perlu memeriksa opsi data formulir (tombol radio) dan menu File dari kotak dropdown untuk mengirim lampiran. Penyediaan tipe konten secara eksplisit saat multipart / formulir-data melempar kesalahan. Karena batas tidak ada karena mengabaikan permintaan curl dari post man ke server dengan tipe konten dengan menambahkan batas yang berfungsi dengan baik.
Lihat RFC1341 dt7.2 Jenis-Konten Multipart
sumber