MIME प्रकार

आम फ़ाइल एक्सटेंशन और उनके IANA MIME प्रकारों की संदर्भ तालिका खोजें, शीर्ष-स्तरीय श्रेणी से छानें, और हर बार सही Content-Type हेडर सेट करें।

इस फ़ाइल को कौन-सा Content-Type हेडर चाहिए? तालिका छानने के लिए .webp जैसा कोई एक्सटेंशन या image जैसे मीडिया प्रकार का कोई हिस्सा टाइप करें। हर प्रविष्टि IANA मीडिया प्रकार रजिस्ट्री और MDN की सामान्य प्रकार सूची का पालन करती है।

मिलान
एक्सटेंशन MIME प्रकार

MIME प्रकार ब्राउज़र को क्या बताता है

मीडिया प्रकार की बनावट

MIME प्रकार - जिसे ठीक से मीडिया प्रकार कहा जाता है - वह लेबल है जो सर्वर अपनी प्रतिक्रिया के साथ जोड़ता है, ताकि क्लाइंट जान सके कि आगे आने वाले बाइट का क्या करना है। इसके दो हिस्से स्लैश से अलग होते हैं: एक शीर्ष-स्तरीय प्रकार जैसे text, image, audio, video, font, model या application, और एक सबटाइप जो विशिष्ट फ़ॉर्मैट का नाम बताता है। image/png और application/json दोनों पूर्ण मीडिया प्रकार हैं; अकेला image नहीं है।

सबटाइप की अपनी परंपराएँ होती हैं। शुरुआती x- कभी प्रायोगिक प्रकार दर्शाता था, जैसे application/x-tar, और यह चलन अब अनुशंसित न होते हुए भी बचे हुए नाम इतने व्यापक रूप से तैनात हैं कि बदले नहीं जा सकते। अंत में लगा +suffix बताता है कि फ़ॉर्मैट किसी अधिक सामान्य सिंटैक्स पर बना है: image/svg+xml XML है, application/ld+json JSON है, और विशिष्ट फ़ॉर्मैट न पहचानने पर पार्सर आधार सिंटैक्स पर लौट सकता है।

कुछ प्रकार अर्धविराम के बाद पैरामीटर स्वीकार करते हैं। इनमें सबसे महत्वपूर्ण charset है, जैसे text/html; charset=utf-8 में। किसी पाठ्य प्रतिक्रिया में इसे छोड़ देना ब्राउज़र को एनकोडिंग का अनुमान लगाने का न्योता देता है, जो मोजिबाके का जाना-पहचाना कारण है, इसलिए UTF-8 स्पष्ट रूप से घोषित करना उन कुछ अतिरिक्त अक्षरों के लायक हमेशा होता है।

हेडर एक्सटेंशन से ज़्यादा क्यों मायने रखता है

ब्राउज़र तय करते हैं कि किसी प्रतिक्रिया का क्या करना है, यह Content-Type हेडर से — URL में मौजूद फ़ाइल नाम से नहीं। PNG को text/plain के रूप में भेजना बाइनरी कचरे की दीवार दिखाता है; JSON को text/html के रूप में भेजने पर कोई fetch क्लाइंट उसे नकार सकता है। हेडर सही रखना ही यह तय करता है कि डाउनलोड सही ऐप्लिकेशन में खुले और इनलाइन एसेट डाउनलोड होने के बजाय रेंडर हो।

इस बेमेल के सुरक्षा परिणाम भी हैं। पुराने ब्राउज़र MIME स्निफ़िंग करते थे — प्रतिक्रिया के पहले बाइट देखकर उस हेडर को अनदेखा कर देते थे जिसे वे ग़लत मानते। ऐसा हमलावर, जो HTML जैसी दिखने वाली फ़ाइल अपलोड कर सके, उसे साइट के ओरिजिन में चलवा सकता था, चाहे सर्वर ने उसे इमेज बताया हो। X-Content-Type-Options: nosniff हेडर इस व्यवहार को बंद कर देता है और उपयोगकर्ता द्वारा अपलोड किया गया कंटेंट देने वाले किसी भी एंडपॉइंट पर अब मानक प्रथा है।

डाउनलोड के लिए मीडिया प्रकार के साथ Content-Disposition: attachment; filename="report.pdf" जोड़ें। मीडिया प्रकार बताता है कि बाइट क्या हैं, और डिस्पोज़िशन बताता है कि ब्राउज़र को उनका क्या करना चाहिए — दोनों अलग सवालों के जवाब देते हैं।

यह मैपिंग वास्तव में कहाँ रहती है

एक्सटेंशन से प्रकार की कोई एक अधिकृत तालिका नहीं है, और यह लोगों को चौंकाता है। IANA मीडिया प्रकारों को रजिस्टर करता है, लेकिन फ़ाइल एक्सटेंशन से प्रकार की मैपिंग एक स्थानीय परंपरा है, जिसे हर सर्वर अलग-अलग सँभालता है। Apache mime.types पढ़ता है, nginx की अपनी mime.types फ़ाइल होती है, और ऐप्लिकेशन फ़्रेमवर्क अपनी लुकअप तालिकाएँ साथ लाते हैं। इसीलिए वही .wasm फ़ाइल एक सर्वर से सही रूप में और किसी दूसरे, अपडेट न हुए सर्वर से application/octet-stream के रूप में मिल सकती है।

application/octet-stream सामान्य फ़ॉलबैक है, जिसका अर्थ है "कोई भी बाइनरी डेटा"। जब फ़ॉर्मैट वाकई अज्ञात हो तो यह ईमानदार उत्तर है, लेकिन यह इनलाइन रेंडरिंग रोक देता है, इसलिए जिन फ़ॉर्मैट को आपकी साइट नियमित रूप से भेजती है, उनके लिए स्पष्ट मैपिंग जोड़ना ठीक रहता है। AVIF, JXL और WebAssembly जैसे नए फ़ॉर्मैट ही पुराने सर्वर कॉन्फ़िगरेशन से सबसे अधिक ग़ायब मिलते हैं।

ओपन-सोर्स नोट: वनीला JavaScript में बनाया गया, कोई थर्ड-पार्टी लाइब्रेरी नहीं।

सामान्य प्रश्न

मेरी फ़ाइल दिखने के बजाय डाउनलोड क्यों हो रही है?
या तो मीडिया प्रकार `application/octet-stream` है, या प्रतिक्रिया `Content-Disposition: attachment` लेकर आती है। इनलाइन रेंडर कराने के लिए सही प्रकार सेट करें और attachment डिस्पोज़िशन हटा दें।
JSON के लिए MIME प्रकार क्या है?
`application/json`। पुराना कोड कभी `text/json` या `application/x-json` उपयोग करता था, पर इनमें से कोई रजिस्टर नहीं है और कुछ क्लाइंट इन्हें नकार देते हैं।
JavaScript को text/javascript या application/javascript होना चाहिए?
`text/javascript` वर्तमान में अनुशंसित रूप है। दोनों हर ब्राउज़र में चलते हैं, लेकिन HTML स्पेसिफ़िकेशन text वाले रूप पर टिका और application वाले रूप को पुराना बताता है।
क्या मुझे charset शामिल करना चाहिए?
पाठ्य प्रकारों के लिए हाँ। इसके बिना ब्राउज़र अनुमान लगाता है, जिससे ग़ैर-ASCII कंटेंट में मोजिबाके पैदा होता है। `text/html; charset=utf-8` या अपने प्रकार का समतुल्य भेजें।
+xml या +json प्रत्यय का क्या अर्थ है?
यह कि फ़ॉर्मैट किसी अधिक सामान्य सिंटैक्स पर बना है। वह क्लाइंट, जो `application/ld+json` को विशेष रूप से नहीं जानता, उसे JSON के रूप में पार्स कर सकता है, और इससे सामान्य टूलिंग संभव होती है।
मेरा सर्वर .webp या .avif के लिए ग़लत प्रकार क्यों भेजता है?
उस सर्वर की `mime.types` फ़ाइल में वह एक्सटेंशन नहीं है। सर्वर कॉन्फ़िगरेशन में स्पष्ट मैपिंग जोड़ें; फ़ाइल खुद ठीक है और उसमें कोई बदलाव नहीं चाहिए।