Apa permintaan http multipart?

300

Saya telah menulis aplikasi iPhone untuk beberapa waktu sekarang, mengirim data ke server, menerima data (melalui protokol HTTP), tanpa terlalu memikirkannya. Secara teoritis saya terbiasa dengan proses, tetapi bagian yang saya tidak begitu akrab adalah permintaan HTTP multipart. Saya tahu struktur dasarnya, tetapi intinya tidak ada.

Tampaknya setiap kali saya mengirim sesuatu yang berbeda dari teks biasa (seperti foto, musik), saya harus menggunakan permintaan multi-bagian. Dapatkah seseorang menjelaskan secara singkat kepada saya mengapa itu digunakan dan apa keuntungannya?

Jika saya menggunakannya, mengapa cara yang lebih baik untuk mengirim foto seperti itu?

MegaManX
sumber
1
Lihat tautan berikut untuk informasi: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
zargarf

Jawaban:

286

Permintaan multipart HTTP adalah permintaan HTTP yang dibangun klien HTTP untuk mengirim file dan data ke Server HTTP. Ini biasanya digunakan oleh browser dan klien HTTP untuk mengunggah file ke server.

Iggy
sumber
4
Hanya ingin menambahkan bahwa bidang data formulir multi-bagian dikirim berurutan . Ini bukan sesuatu yang langsung jelas - saya menambahkan daftar tautan di sini: github.com/balderdashy/skipper/blob/master/... Jika saya mendapatkan waktu untuk menyusun sebuah test case menggunakan PhantomJS / webkit, saya akan menambahkan tautan di sana juga. Browser mematuhi bagian spesifikasi ini, bahkan sejauh IE6.
mikermcneil
88
Bagian yang sulit adalah memahami mengapa ini disebut permintaan multi-bagian , bukan sesuatu yang lebih jelas, seperti permintaan unggah file .
Rafael Eyng
28
OP menginginkan pendekatan dan jawaban filosofis. Jawaban ini tidak menjelaskan bagian "mengapa". Ini lebih tentang bagian "apa". Saya bukan penggemar downvoting, tapi saya berpendapat bahwa jawaban ini bukan yang diinginkan OP dan saya cari.
Saeed Neamati
6
Jenis konten "application / x-www-form-urlencoded" tidak efisien untuk mengirim sejumlah besar data biner atau teks yang mengandung karakter non-ASCII. Jenis konten "multipart / formulir-data" harus digunakan untuk mengirimkan formulir yang berisi file, data non-ASCII, dan data biner. SUMBER ASLI - w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Aditya Aggarwal
2
Detail lebih lanjut dengan screenshot firebug di sini: cubicrace.com/2016/05/upload-files-https-using-java.html
Piyush Chordia
22

Seperti spesifikasi resmi ( https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html ) mengatakan, " satu atau beberapa set data yang berbeda digabungkan dalam satu tubuh ". Jadi ketika foto dan musik ditangani sebagai pesan multi bagian seperti yang disebutkan dalam pertanyaan, mungkin ada beberapa metadata teks biasa yang terkait juga, sehingga membuat permintaan yang berisi berbagai jenis data (biner, teks), yang menyiratkan penggunaan multi bagian.

csonti
sumber
2
Saya pikir bukan itu masalahnya. Saat mengunggah gambar, seluruh gambar (termasuk metadata) akan menjadi satu set data di badan permintaan. Itu masih permintaan multi-bagian, meskipun hanya ada satu bagian dalam tubuh. Anda juga dapat membuat permintaan untuk mengunggah banyak file sekaligus.
Dario Seidl
1
@DarioSeidl standar mengasumsikan Anda mungkin mengirimkan unggahan file dari formulir web, yang dapat menyertakan bidang data lain selain dari unggah file itu sendiri. Misalnya, selain nama file asli, pengguna mungkin menyertakan deskripsi. Multipart juga menangani gumpalan biner umum yang terputus dari konsep "file" tertentu yang berasal.
Ionoclast Brigham