Saya ingin mengajukan pertanyaan tentang multipart/form-data
. Di header HTTP, saya menemukan bahwa Content-Type: multipart/form-data; boundary=???
.
Adalah ???
gratis untuk didefinisikan oleh pengguna? Atau itu dihasilkan dari HTML? Apakah mungkin bagi saya untuk menentukan ??? = abcdefg
?
Adalah
???
gratis untuk didefinisikan oleh pengguna?
Ya.
atau disediakan oleh HTML?
No. HTML memiliki ada untuk melakukan dengan itu. Baca di bawah ini.
Apakah mungkin bagi saya untuk menentukan
???
sebagaiabcdefg
?
Ya.
Jika anda ingin mengirim data ke web server:
name = John
age = 12
menggunakan application/x-www-form-urlencoded
akan menjadi seperti ini:
name=John&age=12
Seperti yang anda lihat, server akan 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 dengan menggunakan multipart/form-data
?
Menggunakan batas, mirip dengan &
.
Misalnya:
--XXX
Content-Disposition: form-data; name="name"
John
--XXX
Content-Disposition: form-data; name="age"
12
--XXX--
Dalam hal ini, batas nilai XXX
. Anda menentukan itu di Content-Type
header sehingga server yang tahu bagaimana split data yang diterimanya.
Jadi, anda perlu untuk:
Menggunakan nilai yang tidak't muncul di HTTP data yang dikirim ke server.
Konsisten dan menggunakan nilai yang sama di mana-mana di pesan permintaan.
Jawaban yang tepat untuk pertanyaan tersebut adalah: ya, anda dapat menggunakan sewenang-wenang nilai batas
parameter, diberikan tidak melebihi 70 byte dan hanya terdiri dari 7-bit US-ASCII
(cetak) karakter.
Jika anda menggunakan salah satu dari multipart/*
jenis konten, anda benar-benar diperlukan untuk menentukan batasan
parameter Content-Type
header, jika server (dalam kasus permintaan HTTP) tidak akan mampu mengurai muatan.
Anda mungkin juga ingin mengatur charset
parameter UTF-8
di Content-Type
header, kecuali jika anda dapat benar-benar pastikan bahwa hanya US-ASCII
charset akan digunakan dalam payload data.
Beberapa kutipan yang relevan dari RFC2046:
4.1.2. Charset Parameter:
tidak Seperti beberapa parameter lain nilai-nilai, nilai-nilai charset parameter yang TIDAK peka. Default set karakter, yang harus diasumsikan tidak adanya charset parameter, US-ASCII.
5.1. Multipart Jenis Media
Seperti yang dinyatakan dalam definisi dari Content-Transfer-Encoding bidang [RFC 2045], tidak ada encoding lain dari "7 bit", "8bit", atau "biner" diizinkan untuk entitas dari tipe "multipart". "multipart" batas pembatas dan field header selalu direpresentasikan sebagai 7 bit US-ASCII dalam hal apapun (meskipun bidang header yang dapat mengkodekan non-US-ASCII teks header sesuai RFC 2047) dan data dalam bagian-bagian tubuh yang dapat dikodekan pada bagian-demi-bagian dasar, dengan Content-Transfer-Encoding bidang masing-masing sesuai bagian tubuh.
Content-Type field untuk multipart entitas memerlukan satu parameter, "batas". Batas pembatas garis ini kemudian didefinisikan sebagai sebuah garis yang terdiri sepenuhnya dari dua karakter tanda hubung ("-", nilai desimal 45) diikuti oleh batas nilai parameter dari Content-Type header field opsional linear spasi, dan mengakhiri CRLF.
Batas pembatas tidak harus muncul dalam bahan yang di enkapsulasi, dan harus tidak lebih dari 70 karakter, tidak termasuk dua terkemuka tanda hubung.
batas pembatas garis berikut yang terakhir bagian tubuh dibedakan pembatas yang menunjukkan bahwa tidak ada lagi bagian tubuh yang akan mengikuti. Seperti pembatas jalur ini identik dengan sebelumnya pembatas garis, dengan penambahan dua tanda hubung setelah batas nilai parameter.
Berikut adalah contoh menggunakan sewenang-batas:
Content-Type: multipart/form-data; charset=utf-8; boundary="another cool boundary"
--another cool boundary
Content-Disposition: form-data; name="foo"
bar
--another cool boundary
Content-Disposition: form-data; name="baz"
quux
--another cool boundary--
"Multipurpose Internet Mail Extensions (MIME) Bagian Dua: Jenis Media"
multipart/form-data yang berisi batas untuk memisahkan pasangan nama/nilai. Batas bertindak seperti sebuah penanda dari setiap potongan dari pasangan nama/nilai berlalu ketika suatu form akan dikirim. Batas ini secara otomatis ditambahkan ke konten-jenis header permintaan.
Formulir dengan enctype="multipart/form-data" atribut akan memiliki permintaan header Content-Type : multipart/form-data; batas --- WebKit193844043-jam (browser yang dihasilkan vaue).
Muatan berlalu terlihat seperti ini:
Content-Type: multipart/form-data; boundary=---WebKitFormBoundary7MA4YWxkTrZu0gW
-----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=”file”; filename=”captcha”
Content-Type:
-----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=”action”
submit
-----WebKitFormBoundary7MA4YWxkTrZu0gW--
Di jejaring samping,'s dikonsumsi di @Mengkonsumsi("multipart/form-data") bentuk.
Hati-hati, ketika pengujian webservice menggunakan chrome tukang pos, anda perlu memeriksa data formulir pilihan(radio button) dan File menu dari kotak dropdown untuk mengirim lampiran. Eksplisit penyediaan content-type sebagai multipart/form-data melempar kesalahan. Karena batas yang hilang seperti itu menimpa curl permintaan dari pak pos untuk server dengan content-type dengan menambahkan batas yang bekerja dengan baik.