โดยทั่วไปสิ่งนี้เกิดขึ้นเพราะเว็บไซต์บอกให้เบราว์เซอร์ทำ บางครั้งอาจเป็นเพราะนักพัฒนาเว็บไซต์ตัดสินใจว่าพวกเขาต้องการพฤติกรรมนี้เช่นพบได้ทั่วไปในเว็บไซต์แบ่งปันไฟล์ บางครั้งอาจเป็นเพราะเป็นตัวเลือกเริ่มต้นสำหรับซอฟต์แวร์ใดก็ตามที่ใช้ (เช่นฟอรัมหรือซอฟต์แวร์บล็อก) บางครั้งมันเป็นเพราะเว็บไซต์ dev ไม่รู้ว่ากำลังทำอะไรอยู่
Content-Disposition
นั่นเป็นเพราะเว็บไซต์ส่งContent-Disposition
ส่วนหัวในการตอบกลับ โดยเฉพาะมันสามารถส่งทั้งสองหรือinline
attachment
inline
เป็นค่าเริ่มต้นหากไม่ได้ระบุเป็นอย่างอื่นและหมายความว่าเบราว์เซอร์จะเปิดไฟล์ภายในหน้าต่างเบราว์เซอร์หากสามารถทำได้
attachment
หมายถึงการดาวน์โหลดไฟล์ทุกครั้งอย่าพยายามเปิดในเบราว์เซอร์
หากคุณเปิดเครื่องมือนักพัฒนาของเบราว์เซอร์คุณจะเห็นลิงค์นั้นส่งส่วนหัวการตอบสนองต่อไปนี้:
Content-Disposition: attachment; filename="Schubert-Sonata-21-B-flat.pdf"
Content-Type: application/pdf
การดำเนินการนี้จะบอกให้เบราว์เซอร์ดาวน์โหลดไฟล์ ( attachment
) เสมอและให้ชื่อไฟล์เริ่มต้นSchubert-Sonata-21-B-flat.pdf
แทนการอนุมานจาก URL นอกจากนี้ยังบอกเบราว์เซอร์ (อย่างถูกต้อง) ว่าเป็นapplication/pdf
ไฟล์ - แต่เนื่องจากattachment
เบราว์เซอร์จะยังคงเป็นค่าเริ่มต้นสำหรับการดาวน์โหลด
รายละเอียดการจัดการแบบอินไลน์
เมื่อ a Content-Disposition
เป็นแบบอินไลน์ (หรือไม่ได้ระบุ) เบราว์เซอร์จะพยายามเปิดไฟล์ในวิวเวอร์เริ่มต้นที่ฝังไว้ ใช้งานได้เมื่อเบราว์เซอร์รู้ว่าเป็นไฟล์ประเภทใดและเบราว์เซอร์รู้วิธีเปิดประเภทนั้น
การตรวจจับประเภท
เซิร์ฟเวอร์สามารถระบุประเภทไฟล์ได้ด้วยContent-Type
ส่วนหัว ยกตัวอย่างเช่นประเภทอินไลน์ที่พบมากที่สุดtext/html
, application/javascript
และtext/css
ทำขึ้นในสามส่วนหลักของเว็บไซต์ที่ทันสมัย application/pdf
นอกจากนี้คุณยังสามารถมีประเภทลึกลับมากขึ้นเช่น
ความเป็นไปได้อีกอย่างหนึ่งคือเซิร์ฟเวอร์ได้ระบุของContent-Type
application/octet-stream
นี่เป็นประเภททั่วไปมากที่สุดและมันบอกเบราว์เซอร์ว่าไฟล์เป็นข้อมูลที่กำหนดเอง - ณ จุดนี้สิ่งเดียวที่เบราว์เซอร์สามารถทำได้ก็คือดาวน์โหลดมัน (ตามทฤษฎีแล้ว
เมื่อContent-Type
ไม่ได้ระบุเซิร์ฟเวอร์ (และบางครั้งแม้จะเป็น) เบราว์เซอร์สามารถดำเนินการสิ่งที่เรียกว่าการดมเพื่อพยายามเดาประเภทโดยการอ่านไฟล์และมองหารูปแบบ
การจัดการประเภท
เมื่อได้รับไฟล์ที่มีinline
หรือไม่มีการจัดการที่ไม่ระบุเบราว์เซอร์จะต้องพยายามเปิดภายในเบราว์เซอร์ถ้าเป็นไปได้ ในการทำเช่นนี้มันจะดูที่ชนิดของไฟล์และหากมันจำได้ว่ามันจะพยายามเปิดมัน เบราว์เซอร์ส่วนใหญ่จะเปิดtext/
ประเภทใดก็ได้ในโปรแกรมดูข้อความแบบง่ายจะพยายามแสดงผลtext/html
เป็นหน้าเว็บอาจเปิดapplication/json
ในมุมมองที่เน้นด้วยไวยากรณ์พิเศษฯลฯ
ประเภทapplication/octet-stream
นี้ได้รับการจัดการเป็นพิเศษ เนื่องจากมันควรจะเป็นประเภททั่วไปที่สุดซึ่งแสดงถึงการไหลของไบต์โดยพลการจึงไม่ควรจะเป็นตัวจัดการใด ๆ ที่สามารถนำไปใช้กับไฟล์ทั้งหมดของ "ประเภท" นี้ ยกตัวอย่างเช่นใน Firefox นี้ปรากฏเป็นไม่สามารถที่จะตั้งตัวจัดการเริ่มต้นapplication/octet-stream
สำหรับ
เว็บไซต์บางแห่งยังใช้ประเภทที่ไม่ได้มาตรฐาน ฉันเคยเห็นapplication/force-download
ใช้แล้ว - ซึ่งเป็นการดาวน์โหลดเนื่องจากเบราว์เซอร์ไม่รู้จักหรือรู้ว่าต้องทำอะไรกับประเภท แต่ไม่สนุกกับการจัดการพิเศษที่application/octet-stream
ทำ
บทเรียนประวัติศาสตร์เล็กน้อย
หากต้องการดูวิธีจัดการกับ PDF เราสามารถเจาะลึกประวัติเว็บ ดูว่าในอดีตเบราว์เซอร์ไม่รู้ว่า PDF คืออะไร ดังนั้นพวกเขาจึงไม่สามารถเปิดได้ แต่เราเคยเห็นว่ามีการเปิดไฟล์ PDF ในเบราว์เซอร์มานานก่อนที่จะมีผู้ชม PDF ในตัวเป็นสิ่งที่ใช้งานได้อย่างไร
เคยเป็นไปได้ที่จะขยายฟังก์ชั่นเบราว์เซอร์ที่มีการควบคุมมากกว่าสิ่งที่คุณสามารถทำได้ด้วยส่วนขยาย / addons จำกัด วันนี้ ผู้ที่เป็นที่รู้จักกันมากที่สุดโดยทั่วไปเป็นปลั๊กอิน ใน Internet Explorer พวกเขาเป็นตัวควบคุม ActiveX ใน Mozilla Firefox และ Google Chrome รุ่นต่อมาเป็นปลั๊กอินของ NPAPI ปลั๊กอินเหล่านี้มีความสามารถในการทำทุกอย่างที่โปรแกรมอื่นสามารถทำได้และสามารถลงทะเบียนตัวเองเป็นตัวจัดการสำหรับประเภทไฟล์ที่เฉพาะเจาะจงซึ่งเบราว์เซอร์อาจไม่รู้จักเป็นอย่างอื่น (โดยบังเอิญพบว่าภายหลังมีความเสี่ยงด้านความปลอดภัยสูงและการสนับสนุนปลั๊กอินที่ทรงพลังเหล่านี้ก็ค่อยๆลดลง ... )
ในวันของปลั๊กอินคุณจะไปและติดตั้ง Adobe Acrobat Reader ซึ่งจะติดตั้งปลั๊กอิน ActiveX หรือ NPAPI ที่จะลงทะเบียนapplication/pdf
ประเภท MIME และบอกเบราว์เซอร์เพื่อเปิดประเภทอินไลน์โดยใช้ปลั๊กอิน
แน่นอนหลังจากปัญหาด้านความปลอดภัยและประสิทธิภาพที่เกิดจากปลั๊กอินเหล่านี้ผู้ขายเบราว์เซอร์รายใหญ่ตัดสินใจรวมผู้ดู PDF ของพวกเขาเองในขณะที่ยุติการสนับสนุนปลั๊กอินส่วนใหญ่ สิ่งเดียวที่เรายังเห็นคือ Adobe Shockwave Flash ซึ่งจัดการapplication/x-shockwave-flash
ได้
ยังมีการควบคุมที่เหลืออยู่สำหรับเรื่องนี้เช่นใน Firefox Preview in Firefox
ตัวเลือกยังคงมีอยู่:
ในอดีตสิ่งนี้จะอนุญาตให้มีตัวเลือกระหว่างปลั๊กอินหลายตัวที่ลงทะเบียนประเภทนั้น ตัวอย่างเช่นรายการประเภทที่ลงทะเบียนสำหรับ Flash:
สมัยก่อนนั้นยังมีการสนับสนุนสื่อมากมายที่มาพร้อมกับ HTML5 มันไม่ได้เป็นเพียงไฟล์ PDF - เบราว์เซอร์ของคุณจะไม่รู้ว่าจะจัดการกับคอนเทนเนอร์ MP4 หรือวิดีโอ H.264 ได้อย่างไรไม่รู้ว่าจะเล่นไฟล์ MP3 ฯลฯ ได้อย่างไรคุณจะเห็นปลั๊กอินที่จัดทำโดยผู้เล่นสื่อเช่น VLC หรือแม้แต่ Windows Media Player หรือเว็บไซต์จะฝังเครื่องเล่นสื่อในตัวแฟลช
Content-Type: application/octet-stream
แต่วันนี้ไม่ค่อยพบบ่อย