ค่าที่เป็นไปได้ทั้งหมดสำหรับส่วนหัว HTTP "ประเภทเนื้อหา" คืออะไร


270

ฉันต้องตรวจสอบContent-Typeค่าส่วนหัวก่อนส่งผ่านไปยังคำขอ HTTP

มีรายการเฉพาะสำหรับค่าที่เป็นไปได้ทั้งหมดContent-Typeหรือไม่

มิฉะนั้นมีวิธีการตรวจสอบประเภทเนื้อหาก่อนที่จะใช้ในการร้องขอ HTTP?


9
ประเภทสื่อที่ถูกต้องควรจะลงทะเบียนกับ IANA - คุณสามารถดูรายการปัจจุบันได้ที่นี่: iana.org/assignments/media-types/media-types.xhtml แต่หมายเหตุรายการนี้สามารถอัปเดตเมื่อเวลาผ่านไป ไม่มีรายการที่อนุญาตคงที่
Joe


@Joe: "ประเภทสื่อที่ถูกต้องควรลงทะเบียนกับ IANA" - รอหมายถึงประเภทสื่อที่กำหนดเอง (สำหรับใช้ในเว็บ API เฉพาะแอปพลิเคชันที่จะถูกเรียกโดยแอปพลิเคชันไคลเอนต์แบบกำหนดเองเท่านั้น) คือ ไม่อนุญาตเลย?
หรือผู้ทำแผนที่

1
@ORMapper ฉันอ่านมันมากขึ้นว่า "มีรายชื่ออย่างเป็นทางการ แต่ฉันไม่แปลกใจที่เห็นคนอื่น ๆ อยู่ในป่า" ในแง่ของคำถามของ OP หากคุณจะลองและตรวจสอบ "ทุกประเภท" อย่างน้อยคุณก็ต้องการตรวจสอบประเภทที่ลงทะเบียนทั้งหมด สิ่งที่ต้องทำกับสิ่งที่เพิ่มเติมคือปลายเปิดที่มากกว่า เท่าที่ฉันทราบไม่มีข้อกำหนดในการลงทะเบียนประเภทที่กำหนดเอง
Joe

โปรดยอมรับคำตอบที่ช่วยคุณได้มากที่สุดในการแก้ปัญหาของคุณ ช่วยผู้อ่านในอนาคต หากคำตอบไม่มีประโยชน์โปรดแสดงความคิดเห็นไว้ด้านล่าง ดังนั้นผู้โพสต์สามารถอัปเดตพวกเขาตาม อ่านฉันควรทำอย่างไรเมื่อมีคนตอบคำถามของฉัน เพื่อทราบข้อมูลเพิ่มเติม
Roshana Pitigala

คำตอบ:


254

คุณสามารถค้นหาเนื้อหาทุกประเภทได้ที่นี่: http://www.iana.org/assignments/media-types/media-types.xhtml

ประเภทที่พบมากที่สุดคือ:

  1. พิมพ์แอปพลิเคชัน

    application/java-archive
    application/EDI-X12   
    application/EDIFACT   
    application/javascript   
    application/octet-stream   
    application/ogg   
    application/pdf  
    application/xhtml+xml   
    application/x-shockwave-flash    
    application/json  
    application/ld+json  
    application/xml   
    application/zip  
    application/x-www-form-urlencoded  
    
  2. พิมพ์เสียง

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. พิมพ์ภาพ

    image/gif   
    image/jpeg   
    image/png   
    image/tiff    
    image/vnd.microsoft.icon    
    image/x-icon   
    image/vnd.djvu   
    image/svg+xml    
    
  4. พิมพ์ multipart

    multipart/mixed    
    multipart/alternative   
    multipart/related (using by MHTML (HTML mail).)  
    multipart/form-data  
    
  5. พิมพ์ข้อความ

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. พิมพ์วิดีโอ

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. พิมพ์ vnd:

    application/vnd.android.package-archive
    application/vnd.oasis.opendocument.text    
    application/vnd.oasis.opendocument.spreadsheet  
    application/vnd.oasis.opendocument.presentation   
    application/vnd.oasis.opendocument.graphics   
    application/vnd.ms-excel    
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet   
    application/vnd.ms-powerpoint    
    application/vnd.openxmlformats-officedocument.presentationml.presentation    
    application/msword   
    application/vnd.openxmlformats-officedocument.wordprocessingml.document   
    application/vnd.mozilla.xul+xml   
    

50

ตามที่กำหนดไว้ในRFC 1341 :

ในสัญลักษณ BNF แบบขยายของ RFC 822 จะมีการกำหนดค่าฟิลด์ส่วนหัวเนื้อหาประเภทดังนี้

เนื้อหาประเภท: = ประเภท "/" ประเภทย่อย * [";" พารามิเตอร์]

ประเภท: = "แอปพลิเคชัน" / "เสียง" / "ภาพ" / "ข้อความ" / "หลายส่วน" / "ข้อความ" / "วิดีโอ" / x-token

x-token: = <อักขระสองตัว "X-" ตามมาโดยไม่มีการเว้นวรรคสีขาวโดยโทเค็นใด ๆ >

ชนิดย่อย: = โทเค็น

พารามิเตอร์: = attribute "=" ค่า

คุณลักษณะ: = โทเค็น

ค่า: = โทเค็น / สตริงที่ยกมา

โทเค็น: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; ต้องอยู่ใน / "," / ";" / ":" / "\" / <">; ที่ยกมาสตริง, /" / "/" ["/"] "/"? "/". "; เพื่อใช้ภายใน /" = "; ค่าพารามิเตอร์

และรายการประเภท MIME ที่รู้จักที่สามารถติดตามได้ (หรือตามที่โจพูดแหล่งที่มาของ IANA )

ในขณะที่คุณสามารถดูรายการมีขนาดใหญ่เกินไปสำหรับคุณที่จะตรวจสอบกับพวกเขาทั้งหมด สิ่งที่คุณสามารถทำได้คือตรวจสอบความถูกต้องของรูปแบบทั่วไปและtypeแอตทริบิวต์เพื่อให้แน่ใจว่าถูกต้อง (ชุดตัวเลือกมีขนาดเล็ก) และเพียงแค่คิดว่าสิ่งที่ตามมานั้นถูกต้อง (และแน่นอนว่ามีข้อยกเว้นใด ๆ เพื่อการใช้งานจริง)

บันทึกความคิดเห็นด้านบนด้วย:

หากประเภทหลักอื่นจะใช้ด้วยเหตุผลใดก็ตามจะต้องได้รับชื่อที่ขึ้นต้นด้วย "X-" เพื่อระบุสถานะที่ไม่ได้มาตรฐานและเพื่อหลีกเลี่ยงความขัดแย้งที่อาจเกิดขึ้นกับชื่ออย่างเป็นทางการในอนาคต

คุณจะสังเกตเห็นว่าคำขอ / การตอบกลับ HTTPจำนวนมากมีX-ส่วนหัวของการเรียงลำดับบางอย่างที่กำหนดด้วยตนเองโปรดระลึกไว้เสมอเมื่อทำการตรวจสอบประเภท


RFC 1341 ไม่เกี่ยวข้องกับ HTTP
Julian Reschke

2
RFC 1341 อธิบายส่วนหัวประเภทเนื้อหาที่ใช้ใน HTTP คุณจะบอกว่าพวกเขาไม่เกี่ยวข้องกันอย่างไร?
Jeroen Vannevel

2
มีการล้าสมัยและแทนที่ด้วยเอกสารใหม่กว่าหลายครั้ง สิ่งที่เกี่ยวข้องคือสิ่งที่ < greenbytes.de/tech/webdav/… > (รวมถึงเอกสารอ้างอิง) ต้องบอกว่า
Julian Reschke

3

ฉันจะตั้งเป้าหมายที่จะครอบคลุมค่า "ประเภทเนื้อหา" ที่เป็นไปได้คำถามที่คุณดูเหมือนจะเน้นไปที่การระบุประเภทเนื้อหาที่รู้จัก

@Jeroen RFC 1341 อ้างอิงเป็นสิ่งที่ดี แต่สำหรับรายการครบถ้วนสมบูรณ์ธรรม IANA ช่วยให้หน้าเว็บจดทะเบียนอย่างเป็นทางการประเภทสื่อที่นี่


สิ่งเหล่านี้ไม่ใช่ mediatypes ที่ "รู้จัก" (ตัวอย่างของสิ่งที่สังเกตได้ "ในป่า") แต่เป็นสื่อกลางที่ผ่านขั้นตอนการลงทะเบียน IANA พวกเขาจึงลงทะเบียนอย่างเป็นทางการ พบว่าเป็นสิ่งสำคัญที่จะชี้ประเด็นนี้ออกไป :)
DaSourcerer

0

หากคุณใช้ jaxrs หรืออื่น ๆ จะมีคลาสที่เรียกว่า mediatype ผู้ใช้ interceptor ก่อนที่จะส่งคำขอและเปรียบเทียบกับสิ่งนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.