← सभी टूल

MIME टाइप संदर्भ

MIME टाइप क्या हैं, type/subtype फॉर्मेट कैसे काम करता है, HTTP और ईमेल में Content-Type का महत्व, सामान्य टाइप और गलत टाइप से क्या टूटता है।
एक्सटेंशनMIME टाइप

MIME टाइप वास्तव में क्या है

एक MIME टाइप, जिसे मीडिया टाइप भी कहा जाता है, एक छोटा लेबल है जो सॉफ़्टवेयर को बताता है कि किसी फ़ाइल या संदेश के मुख्य भाग में किस तरह का डेटा है। इसका जन्म ईमेल में हुआ था (नाम का अर्थ है Multipurpose Internet Mail Extensions) लेकिन आज यह वेब पर हर जगह दिखता है। प्रारूप हमेशा type/subtype होता है: एक व्यापक श्रेणी, एक स्लैश, और एक विशिष्ट प्रारूप। तो text/html का अर्थ है "टेक्स्ट, HTML रूप में", image/png का अर्थ है "एक छवि, PNG रूप में", और application/json का अर्थ है "एप्लिकेशन डेटा, JSON के रूप में एन्कोडेड"।

शीर्ष-स्तरीय type IANA, यानी आधिकारिक रजिस्ट्री, द्वारा रखरखाव किए जाने वाले एक निश्चित समुच्चय से आता है: text, image, audio, video, application, font, model, multipart, और haptics जैसे कुछ नए। subtype विशिष्ट प्रारूप है। विक्रेता vnd. उपसर्ग के साथ अपने स्वयं के जोड़ सकते हैं (उदाहरण के लिए application/vnd.ms-excel), और प्रायोगिक टाइप ऐतिहासिक रूप से x- उपसर्ग का उपयोग करते थे, हालाँकि अब उस परंपरा को हतोत्साहित किया जाता है।

गहरे इंडिगो पृष्ठभूमि पर लेबल वाली श्रेणी टाइलों में छाँटे गए अमूर्त चमकते फ़ाइल-प्रारूप आइकन
हर फ़ाइल प्रारूप एक type/subtype लेबल से मैप होता है।

MIME टाइप कहाँ मायने रखते हैं

एकमात्र सबसे महत्वपूर्ण स्थान जहाँ MIME टाइप दिखता है वह है HTTP Content-Type रिस्पॉन्स हेडर। जब कोई सर्वर कोई पेज, कोई छवि, या कोई API पेलोड भेजता है, तो यह हेडर ब्राउज़र को बताता है कि बाइट्स की व्याख्या कैसे करनी है। यदि हेडर text/html कहता है, तो ब्राउज़र मार्कअप रेंडर करता है; यदि वह application/json कहता है, तो एक fetch() कॉल उसे पार्स कर सकती है; यदि वह application/pdf कहता है, तो अंतर्निहित व्यूअर खुलता है। यही हेडर रिक्वेस्ट की ओर भी जाता है: जब आप कोई फ़ॉर्म या API बॉडी POST करते हैं, तो Content-Type सर्वर को बताता है कि आपने जो भेजा उसे कैसे पढ़ना है।

HTTP से परे, MIME टाइप कई अन्य प्रणालियों को चलाते हैं। ईमेल क्लाइंट इनका उपयोग यह तय करने के लिए करते हैं कि कोई अटैचमेंट पूर्वावलोकन करने के लिए एक छवि है या सहेजने के लिए एक बाइनरी। फ़ाइल-अपलोड हैंडलर फ़ाइलों को स्वीकार या अस्वीकार करने के लिए घोषित टाइप का निरीक्षण करते हैं। और ऑपरेटिंग सिस्टम या ब्राउज़र डिफ़ॉल्ट एप्लिकेशन चुनने के लिए केवल फ़ाइल एक्सटेंशन नहीं, बल्कि टाइप का उपयोग करता है। यही विचार इस बात को रेखांकित करता है कि सर्वर HTTP स्टेटस कोड के साथ परिणाम और त्रुटियाँ कैसे रिपोर्ट करते हैं — गलत टाइप वाला 200 रिस्पॉन्स 404 जितना ही ख़राब हो सकता है।

वे जिन्हें आप रोज़ उपयोग करेंगे

कुछ ही टाइप असल ट्रैफ़िक के विशाल बहुमत को कवर करते हैं:

  • text/html — वेब पेज (एक्सटेंशन .html)
  • text/css — स्टाइलशीट (.css)
  • text/javascript — JavaScript के लिए अनुशंसित टाइप (.js, .mjs)
  • application/json — एकमात्र आधिकारिक JSON टाइप, RFC 8259 में परिभाषित (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — आम छवि प्रारूप
  • application/pdf — PDF दस्तावेज़ (.pdf)
  • application/octet-stream — अज्ञात या मनमाने बाइनरी डेटा के लिए सर्व-समावेशी
  • text/plain — सादे टेक्स्ट के लिए डिफ़ॉल्ट जिसका कोई समृद्ध टाइप नहीं है

JSON एक टिप्पणी का हक़दार है क्योंकि यह लोगों को उलझाता है। एकमात्र सही टाइप application/json है। पुराना कोड कभी-कभी text/json, text/plain, या application/x-javascript का उपयोग करता था, लेकिन वे अप्रचलित हैं और कुछ क्लाइंट उन्हें पार्स करने से इनकार कर देंगे। JSON के लिए कोई charset पैरामीटर भी नहीं है — विनिर्देश UTF-8 अनिवार्य करता है, इसलिए application/json; charset=utf-8 लिखना अनावश्यक है हालाँकि हानिरहित है। प्रारूपों और एक्सटेंशन की एक पूर्ण तालिका के लिए, हमारी संदर्भ तालिकाएँ देखें।

एक नेटवर्क कनेक्शन के पार बहता एक अमूर्त टाइप बैज से टैग किया गया चमकता डेटा पैकेट
Content-Type पेलोड के साथ HTTP के ज़रिये यात्रा करता है।

गलत Content-Type चीज़ें क्यों तोड़ देता है

ब्राउज़र और क्लाइंट घोषित टाइप पर भरोसा करते हैं, इसलिए इसे गलत करने के ठोस परिणाम होते हैं। किसी JSON API रिस्पॉन्स को text/html के रूप में परोसें और ब्राउज़र उसे रेंडर करने का प्रयास कर सकता है, या कोई सख्त क्लाइंट आपका कोड चलने से पहले ही एक पार्स त्रुटि दे सकता है। किसी CSS या JavaScript फ़ाइल को गलत टाइप के साथ परोसें और X-Content-Type-Options: nosniff नामक एक सुरक्षा सुविधा ब्राउज़र को उसे लागू करने से इनकार करवा देगी, जिससे आपका पेज स्टाइलिंग या स्क्रिप्ट चुपचाप टूट जाएँगे।

डाउनलोड दूसरी क्लासिक विफलता है। यदि आप चाहते हैं कि कोई फ़ाइल प्रदर्शित होने के बजाय डाउनलोड हो, तो Content-Disposition हेडर के साथ-साथ टाइप मायने रखता है। application/octet-stream के रूप में भेजी गई एक PDF व्यूअर में खुलने के बजाय एक सामान्य फ़ाइल के रूप में डाउनलोड होती है; text/plain के रूप में भेजी गई एक छवि अनाप-शनाप वर्णों के रूप में दिखती है। अपलोड की ओर, गलत लेबल वाली फ़ाइल किसी सरल एक्सटेंशन जाँच को आसानी से पार कर सकती है, यही कारण है कि मज़बूत वैलिडेटर क्लाइंट द्वारा दिए गए टाइप पर भरोसा करने के बजाय असली बाइट्स ("मैजिक नंबर") का निरीक्षण करते हैं।

ऐतिहासिक रूप से, जब हेडर गलत दिखता था तो ब्राउज़र असली टाइप का अनुमान लगाने, या "स्निफ़" करने, की कोशिश करते थे। उस व्यवहार ने सुरक्षा छेद पैदा किए, इसलिए आधुनिक सर्वोत्तम अभ्यास है हमेशा एक सटीक Content-Type भेजना और nosniff के साथ स्निफ़िंग को अक्षम करना। संक्षेप में: हर रिस्पॉन्स पर टाइप को जानबूझकर सेट करें, और अधिकांश रेंडरिंग, डाउनलोड और पार्सिंग बग गायब हो जाते हैं।

अक्सर पूछे जाने वाले प्रश्न

MIME टाइप और मीडिया टाइप के बीच क्या अंतर है?

वे एक ही चीज़ हैं। "MIME टाइप" ईमेल से आया पुराना नाम है, जबकि "मीडिया टाइप" वह शब्द है जिसे IANA और आधुनिक HTTP विनिर्देश पसंद करते हैं। दोनों type/subtype लेबल को संदर्भित करते हैं।

JSON के लिए सही MIME टाइप क्या है?

यह application/json है, जो RFC 8259 में परिभाषित है। text/json या application/x-javascript जैसे पुराने विकल्प अप्रचलित हैं और कुछ क्लाइंट उन्हें अस्वीकार कर देंगे।

application/octet-stream का क्या अर्थ है?

यह बिना किसी अधिक विशिष्ट लेबल वाले मनमाने बाइनरी डेटा के लिए सामान्य टाइप है। सर्वर इसे अज्ञात फ़ाइल टाइप के लिए एक फ़ॉलबैक के रूप में उपयोग करते हैं, जो आमतौर पर ब्राउज़र में प्रदर्शन के बजाय एक डाउनलोड शुरू करता है।

मेरी CSS या JavaScript फ़ाइल लोड क्यों नहीं होती?

अक्सर सर्वर इसे गलत Content-Type के साथ भेजता है। X-Content-Type-Options को nosniff पर सेट करने के साथ, ब्राउज़र उस CSS को लागू करने से इनकार कर देता है जो text/css नहीं है या उन स्क्रिप्ट को जो किसी JavaScript टाइप की नहीं हैं। सर्वर कॉन्फ़िगरेशन को ठीक करें ताकि सही टाइप भेजा जाए।

क्या मैं किसी MIME टाइप में charset जोड़ सकता हूँ?

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

क्या फ़ाइल एक्सटेंशन MIME टाइप निर्धारित करता है?

HTTP पर नहीं। सर्वर तय करता है कि कौन-सा Content-Type भेजना है, और ब्राउज़र उस हेडर पर भरोसा करता है। एक्सटेंशन केवल तब टूल और ऑपरेटिंग सिस्टम के लिए एक संकेत के रूप में काम करता है जब कोई स्पष्ट टाइप प्रदान नहीं किया जाता।