คำขอ http หลายส่วนคืออะไร


300

ฉันได้เขียนแอพพลิเคชั่นของ iPhone มาสักพักแล้วส่งข้อมูลไปยังเซิร์ฟเวอร์รับข้อมูล (ผ่านโปรโตคอล HTTP) โดยไม่ต้องคิดมาก ส่วนใหญ่ฉันคุ้นเคยกับกระบวนการทางทฤษฎี แต่ส่วนที่ฉันไม่คุ้นเคยก็คือคำขอ HTTP หลายส่วน ฉันรู้ว่าโครงสร้างพื้นฐานของมัน แต่แก่นแท้ของมันทำให้ฉันหลง

ดูเหมือนว่าเมื่อใดก็ตามที่ฉันกำลังส่งสิ่งที่แตกต่างจากข้อความธรรมดา (เช่นภาพถ่ายเพลง) ฉันต้องใช้คำขอแบบหลายส่วน ใครบางคนสามารถอธิบายให้ฉันฟังสั้น ๆ ว่าทำไมมันถึงถูกใช้และประโยชน์ของมันคืออะไร?

ถ้าฉันใช้มันทำไมมันเป็นวิธีที่ดีกว่าในการส่งภาพถ่ายในแบบนั้น?


1
ดูลิงค์ต่อไปนี้สำหรับข้อมูล: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
zargarf

คำตอบ:


286

คำขอ HTTP หลายส่วนเป็นคำขอ HTTP ที่ไคลเอ็นต์ HTTP สร้างเพื่อส่งไฟล์และข้อมูลไปยังเซิร์ฟเวอร์ HTTP เบราว์เซอร์และไคลเอนต์ HTTP มักใช้เพื่ออัปโหลดไฟล์ไปยังเซิร์ฟเวอร์


4
แค่อยากจะเพิ่มว่าเขตข้อมูลรูปแบบหลายส่วนจะถูกส่งในการสั่งซื้อ นี่ไม่ใช่สิ่งที่เห็นได้ชัดในทันที - ฉันเพิ่มรายการลิงก์ที่นี่: github.com/balderdashy/skipper/blob/master/ ...... ถ้าฉันมีเวลาพอที่จะรวบรวมกรณีทดสอบโดยใช้ PhantomJS / webkit ฉันจะเพิ่ม ลิงค์มีเช่นกัน เบราว์เซอร์เชื่อฟังส่วนนี้ของสเป็คแม้กระทั่งไกลถึง IE6
mikermcneil

88
ส่วนที่ยากคือเข้าใจว่าทำไมมันเรียกว่าคำขอ multipartแทนการบางสิ่งบางอย่างที่เห็นได้ชัดมากขึ้นเช่นการร้องขอการอัปโหลดไฟล์
Rafael Eyng

28
OP ต้องการแนวทางและคำตอบเชิงปรัชญา คำตอบนี้ไม่ได้อธิบายว่า "ทำไม" ส่วนหนึ่ง มันเกี่ยวกับส่วน "อะไร" ฉันไม่ใช่แฟนตัวยงของการลงคะแนน แต่ฉันยืนยันว่าคำตอบนี้ไม่ใช่สิ่งที่ OP ต้องการและฉันค้นหา
Saeed Neamati

6
ประเภทเนื้อหา "application / x-www-form-urlencoded" นั้นไม่มีประสิทธิภาพสำหรับการส่งข้อมูลไบนารีหรือข้อความจำนวนมากที่มีอักขระที่ไม่ใช่ ASCII ควรใช้ชนิดเนื้อหา "multipart / form-data" เพื่อส่งแบบฟอร์มที่มีไฟล์ข้อมูลที่ไม่ใช่ ASCII และข้อมูลไบนารี แหล่งที่มาดั้งเดิม
Aditya Aggarwal

2
รายละเอียดเพิ่มเติมกับภาพหน้าจอ firebug ที่นี่: cubicrace.com/2016/05/upload-files-https-using-java.html
Piyush Chordia

22

ตามข้อกำหนดอย่างเป็นทางการ ( https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html ) กล่าวว่า " มีชุดข้อมูลหนึ่งชุดหรือมากกว่ารวมกันเป็นร่างเดียว " ดังนั้นเมื่อภาพถ่ายและเพลงได้รับการจัดการเป็นข้อความแบบหลายส่วนตามที่กล่าวถึงในคำถามอาจมีเมตาดาต้าข้อความธรรมดาที่เกี่ยวข้องเช่นกันดังนั้นการร้องขอที่มีข้อมูลประเภทต่าง ๆ (ไบนารีข้อความ) ซึ่งหมายถึงการใช้งานหลายส่วน


2
ฉันไม่คิดว่าเป็นอย่างนั้น เมื่ออัปโหลดภาพทั้งภาพ (รวมถึงข้อมูลเมตา) จะเป็นชุดข้อมูลหนึ่งชุดในเนื้อหาคำขอ มันยังคงเป็นคำขอแบบหลายส่วนแม้ว่าจะมีเพียงส่วนเดียวในร่างกาย นอกจากนี้คุณยังสามารถสร้างคำขอให้อัปโหลดหลายไฟล์พร้อมกัน
Dario Seidl

1
@DarioSeidl มาตรฐานถือว่าคุณอาจส่งไฟล์ที่อัปโหลดจากเว็บฟอร์มซึ่งอาจรวมถึงเขตข้อมูลอื่นนอกเหนือจากการอัปโหลดไฟล์เอง ตัวอย่างเช่นนอกเหนือจากชื่อไฟล์ดั้งเดิมผู้ใช้อาจมีคำอธิบาย Multipart ยังจัดการ blobs ไบนารีทั่วไปที่ถูกตัดการเชื่อมต่อจากแนวคิดของ "ไฟล์" ที่มีต้นกำเนิด
Ionoclast Brigham
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.