ไม่รู้จักไฟล์ประเภท MIME?


140

ฉันต้องระบุประเภท MIME หรือไม่ถ้าไฟล์ที่อัพโหลดไม่มีนามสกุล? กล่าวอีกนัยหนึ่งมีประเภท MIME ทั่วไปที่เป็นค่าเริ่มต้นหรือไม่

คำตอบ:


184

คุณสามารถใช้application/octet-streamสำหรับประเภทที่ไม่รู้จัก

RFC 2046รัฐในส่วน 4.5.1:

ชนิดย่อย "octet-stream" ใช้เพื่อระบุว่าเนื้อหามีข้อมูลไบนารีโดยพลการ


3
จริงๆแล้วต่อ RFC ของคุณไม่ควรส่งข้อมูลประเภทใด ๆ ที่มีข้อมูลที่ไม่รู้จัก RFC-2046 กำหนดประเภทที่รู้จักเท่านั้น แต่ RFC-7231 จะบอกวิธีจัดการประเภทที่ไม่รู้จัก
Sampo Sarrala - codidact.org

@SampoSarrala ฉันอ่าน RFC-7231 แตกต่างกันเล็กน้อย: "ถ้าไม่มีส่วนหัวของประเภทเนื้อหา Content ผู้รับอาจถือว่าประเภทสื่อของ" application / octet-stream "([RFC2046], ส่วน 4.5.1) หรือ ตรวจสอบข้อมูลเพื่อกำหนดประเภทของมัน " ฉันตีความว่าตามที่เราควรจะส่ง NO Content-Type หรือเรามีความปลอดภัยในการส่งแอปพลิเคชั่น / octet-stream เป็นค่าเริ่มต้นหากเราไม่ต้องการให้ลูกค้าเล่นเกมที่คาดเดาด้วยการตรวจสอบเนื้อหา
Jpnh

1
@Jpnh ใช่ถูกต้อง ไม่ควรแสดงส่วนหัวของประเภทเนื้อหาเมื่อใดก็ตามที่ไม่ทราบ เราสามารถส่งแอปพลิเคชั่น / ออคเต็ตสตรีมซึ่งบอกลูกค้าว่า " คุณไม่ต้องการที่จะแสดงมันตอนนี้ แต่ไปที่และบันทึกไบต์เหล่านี้ไปยังไฟล์แทน " สิ่งนี้ทำให้เว็บไคลเอนต์เสนอไฟล์บันทึก ตัวเลือก 1 == ไม่รู้อะไรเลยเกี่ยวกับไฟล์นี้ ตัวเลือก 2 == เนื้อหาไฟล์ไม่สามารถอธิบายได้โดยใช้ mime หรือควรบันทึกลงดิสก์เท่านั้น ในทางปฏิบัติตัวเลือกทั้งสองจะถูกต้อง ฉันควรเลือกข้อความที่ดีกว่าเพื่อหลีกเลี่ยงความสับสน
Sampo Sarrala - codidact.org

4
"ข้อมูลไบนารีโดยพลการ" ไม่ได้เป็น "ไม่รู้จัก" เมื่อใช้ application / octet-stream คุณจะบอกเบราว์เซอร์ว่าทราบว่าเป็นประเภทเนื้อหาไม่ใช่ข้อความหรือรูปภาพ แต่เป็นข้อมูลไบนารีโดยพลการและควรจะดาวน์โหลดไฟล์และเรียกใช้งาน นี่เป็นช่องโหว่ด้านความปลอดภัยโดยเฉพาะอย่างยิ่งเมื่อพิจารณาจากตัวจัดการการดาวน์โหลดสมัยใหม่ที่แทบจะมองไม่เห็น คำตอบที่ถูกต้องคือไม่มีส่วนหัวประเภทเนื้อหา หากคุณไม่ทราบว่าเป็นไฟล์ประเภทใดเบราว์เซอร์อาจรู้ได้ดังนั้นให้เดาโดยเฉพาะอย่างยิ่งเมื่อรู้จักบริบทการใช้งาน (รูปภาพเอกสารสคริปต์ ... )
FF_Dev

@FF_Dev ฉันแน่ใจว่ามันไร้สาระ "ข้อมูลไบนารีโดยพลการ" ไม่ได้แปลว่า "ปฏิบัติการได้"; ไม่มีเหตุผลที่เบราว์เซอร์ (หรือตัวจัดการดาวน์โหลด) ควรถือว่าapplication/octet-streamไฟล์นั้นทำงานได้ และแม้ว่าเบราว์เซอร์จะดาวน์โหลดไฟล์ที่เรียกใช้งานได้อย่างรู้เท่าทันมันก็ไม่ได้ "อาจเรียกใช้" โดยที่ผู้ใช้ไม่ได้ร้องขอ เพียงแค่ดาวน์โหลดไฟล์ปฏิบัติการไม่ได้หมายความว่าฉันต้องการให้มันรันตอนนี้ หากมีเบราว์เซอร์ที่สามารถเรียกใช้application/octet-streamไฟล์โดยอัตโนมัติเมื่อดาวน์โหลดให้บอกเราว่าควรทำเช่นไร ตอนนี้ฉันไม่เชื่อคุณ
Mark Amery

38

ทรัพยากร RFC:

เราควรใช้ RFC-7231 (ความหมาย HTTP / 1.1 และเนื้อหา) เป็นข้อมูลอ้างอิงแทน RFC-2046 (ประเภทสื่อ) เพราะคำถามมีความชัดเจนเกี่ยวกับ HTTP Content-Type

ด้วย RFC-2046 ไม่ได้กำหนดประเภทที่ไม่รู้จักอย่างชัดเจน แต่ RFC-7231 ทำ

คำตอบสั้น ๆ :

อย่าส่งประเภท MIME สำหรับข้อมูลที่ไม่รู้จัก
เพื่อให้ชัดเจนยิ่งขึ้น: อย่าใช้ส่วนหัวของประเภทเนื้อหาเลย

อ้างอิง:

RFC-7231
Hypertext Transfer Protocol (HTTP / 1.1): ความหมายและเนื้อหา
3.1.1.5 ชนิดของเนื้อหา

ผู้ส่งที่สร้างข้อความที่มี
เนื้อหาส่วนของข้อมูลSHOULD จะสร้างฟิลด์ส่วนหัวของประเภทเนื้อหาในข้อความนั้นยกเว้นว่า
ประเภทสื่อที่ต้องการของการเป็นตัวแทนล้อมรอบไม่เป็นที่รู้จักของ
ผู้ส่ง

ส่วนนั้นจะบอกให้คุณออกไปอย่างชัดเจนถ้าคุณไม่แน่ใจ นอกจากนี้ยังบอกว่าผู้รับสามารถสันนิษฐานได้ว่าประเภทนั้นคือ application / octet-stream แต่สิ่งที่มันอาจเป็นอย่างอื่น

แล้วอะไรล่ะ

RFC-2046
4.5.1 ประเภทย่อยของ octet-Stream

การดำเนินการที่แนะนำสำหรับการใช้งานที่ได้รับ
เอนทิตี "แอปพลิเคชัน / octet-stream" ก็คือการเสนอให้ใส่ข้อมูลลง
ในไฟล์พร้อมการเข้ารหัสการถ่ายโอนเนื้อหาใด ๆ ที่เลิกทำหรืออาจจะ
ใช้เป็นอินพุตให้กับผู้ใช้ กระบวนการ.

และตามที่ระบุไว้ข้างต้น:

RFC-7231
3.1.1.5 ชนิดของเนื้อหา

หากไม่มีส่วนหัวของเนื้อหาประเภทเนื้อหาผู้รับอาจถือว่าประเภทสื่อของ "application / octet-stream"
([RFC2046], ส่วน 4.5.1) หรือตรวจสอบข้อมูลเพื่อกำหนดประเภทของมัน

สรุป:

หากคุณกำหนดเป็น "application / octet-stream" คุณจะบอกว่าคุณรู้ว่าเป็น "application / octet-stream"

หากคุณไม่ได้กำหนดไว้คุณก็กำลังบอกว่าคุณไม่รู้ว่ามันคืออะไรและปล่อยให้ตัดสินใจรับและผู้รับสามารถตรวจสอบว่ามันเดินเหมือนเป็ดและ ...


1
คำตอบนี้สมควรได้รับการโหวตเพราะมันเป็นความจริงเพียงอย่างเดียว นอกจากนี้การใช้ "application / octet-stream" เป็นค่าเริ่มต้นทำการดาวน์โหลดทริกเกอร์เบราว์เซอร์ส่วนใหญ่ซึ่งเป็นช่องโหว่ด้านความปลอดภัยโดยพิจารณาจากตัวจัดการการดาวน์โหลดที่ทันสมัยที่แทบมองไม่เห็น
FF_Dev

1
สิ่งนี้ถูกต้องสำหรับ HTTP แต่คำถามเกี่ยวกับ MIME โดยทั่วไปไม่ใช่เกี่ยวกับ HTTP ตัวอย่างเช่นในอีเมลกฎจะแตกต่างอย่างสิ้นเชิง ดูเพิ่มเติมที่การอภิปรายที่เสนอซ้ำซ้อนstackoverflow.com/questions/12539058/…
tripleee

ฉันให้ uptick ด้วยเหตุผลเดียวกัน แต่ฉันเห็นด้วยกับ FF_Dev เว้นแต่ว่าเจตนาจะเป็น "แอพพลิเคชั่น / ออคเต็ตสตรีม" และเพื่อให้ดาวน์โหลดคุณไม่จำเป็นต้องมี "แอปพลิเคชัน / ไม่ทราบ" มันจะดีถ้าเบราว์เซอร์จะไม่พยายามดาวน์โหลดไฟล์หากไม่ได้ตั้งค่า "Content-Disposition" แต่มีเว็บไซต์จำนวนมากที่ดาวน์โหลดไฟล์แบบสุ่มโดยไม่ตั้งค่าชื่อไฟล์ให้ใช้ โดยเฉพาะธนาคาร
justdan23

14

ฉันชอบapplication/unknownแต่ผลลัพธ์จะเหมือนกันอย่างแน่นอนapplication/octet-stream


17
มีมาตรฐานที่อนุญาตให้ใช้งาน / ไม่รู้จักแทน application / octet-stream หรือไม่?
Hendrik Brummermann

3
ขอบคุณ! แอปพลิเคชั่น / ไม่รู้จักทำงานได้ดีผลออคเต็ตสตรีมข้อผิดพลาดในโครเมี่ยมที่ png-file ตัวอย่างของฉัน!
fnkr

10
ทำไมทำหน้าที่เป็นไฟล์ .png เป็นapplication/octet-streamหรือapplication/unknown? image/pngมีเหตุผลที่พวกเขาคิดค้นเป็น
Aidiakapi

10
@ jenson-button-event ไม่มีอะไรเกี่ยวข้องกับการปรับแต่งวงล้อ ประเภท MIME จะระบุความตั้งใจของคุณ หากคุณรู้ว่าสิ่งที่คุณกำลังส่งควรเป็นภาพ png ส่งผ่านข้อมูลนั้น หากไบต์เป็นตัวแทนของ jpeg โดยไม่ตั้งใจแอปพลิเคชันของคุณสามารถเตือนคุณได้ว่ามันไม่ใช่ png ที่ถูกต้องและคุณมีข้อผิดพลาดที่อื่น นอกจากนี้แอปพลิเคชั่นบางตัวอาจไม่แข็งแรงเท่าเบราว์เซอร์ พวกมันถูกออกแบบมาเพื่อแก้ไขข้อผิดพลาดของโปรแกรมเมอร์ แต่มันก็ไม่ได้มีวัตถุประสงค์เพียงอย่างเดียว เบราว์เซอร์ไม่ใช่แอปพลิเคชันเดียวที่ใช้ประเภท MIME
Aidiakapi

2
การอ้างอิงของคุณคืออะไร ประเภทที่ไม่รู้จักไม่ได้ให้ข้อมูลใด ๆ เกี่ยวกับเนื้อหาหรือสถานะของไฟล์หรือแม้ว่ามันจะเป็นแบบไบนารี่หรือข้อความก็ตามมันคลุมเครือเกินไปสำหรับรหัสการผลิตอาจจะใช้ได้สำหรับโครงการขนาดเล็กเพราะหากไฟล์ชนิดไม่มี ตัวจัดการในระบบปฏิบัติการนั้นเป็นไบนารีที่สามารถดาวน์โหลดได้ - และชนิดที่ไม่รู้จักคือหมายเลขอ้างอิงที่รู้จักใน windows OS ซึ่งคุณสามารถกำหนดการกระทำ (เช่นการเปิดไฟล์ที่ไม่รู้จักด้วยแผ่นจดบันทึก) แม้ว่าการปฏิบัติที่ไม่เหมาะสมคุณสามารถใช้ประเภทที่ไม่รู้จักรวมกับสิ่งนี้เพื่อข้ามการดำเนินการใด ๆ : /
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.