क्रोम
Chrome (संस्करण 38 लेखन के रूप में) के पास MIME प्रकार निर्धारित करने के 3 तरीके हैं और एक निश्चित क्रम में ऐसा करता है। नीचे दिया गया स्निपेट फ़ाइल src/net/base/mime_util.cc
, विधि से है MimeUtil::GetMimeTypeFromExtensionHelper
।
// We implement the same algorithm as Mozilla for mapping a file extension to
// a mime type. That is, we first check a hard-coded list (that cannot be
// overridden), and then if not found there, we defer to the system registry.
// Finally, we scan a secondary hard-coded list to catch types that we can
// deduce but that we also want to allow the OS to override.
हार्ड-कोडित सूचियाँ फ़ाइल में कुछ समय पहले आती हैं: https://cs.chromium.org/chromium/src/net/base/mime_util.cc?l=170 ( kPrimaryMappings
और kSecondaryMappings
)।
एक उदाहरण: Microsoft Excel के साथ Windows सिस्टम से CSV फ़ाइल अपलोड करते समय, Chrome इसकी रिपोर्ट करेगा application/vnd.ms-excel
। ऐसा इसलिए है क्योंकि .csv
पहली हार्ड-कोडेड सूची में निर्दिष्ट नहीं है, इसलिए ब्राउज़र सिस्टम रजिस्ट्री में वापस आ जाता है। HKEY_CLASSES_ROOT\.csv
एक मान है जिसका नाम Content Type
सेट है application/vnd.ms-excel
।
इंटरनेट एक्स्प्लोरर
फिर से उसी उदाहरण का उपयोग करते हुए, ब्राउज़र रिपोर्ट करेगा application/vnd.ms-excel
। मुझे लगता है कि इंटरनेट एक्सप्लोरर (लेखन के रूप में 11 संस्करण) रजिस्ट्री का उपयोग करना उचित है । संभवतः यह क्रोम और फ़ायरफ़ॉक्स जैसी हार्ड-कोडेड सूची का उपयोग भी करता है, लेकिन इसकी बंद स्रोत प्रकृति इसे सत्यापित करना कठिन बनाती है।
फ़ायरफ़ॉक्स
जैसा कि क्रोम कोड में इंगित किया गया है, फ़ायरफ़ॉक्स (लेखन के रूप में 32 संस्करण) एक समान तरीके से काम करता है। फ़ाइल uriloader\exthandler\nsExternalHelperAppService.cpp
, विधि से स्निपेटnsExternalHelperAppService::GetTypeFromExtension
// OK. We want to try the following sources of mimetype information, in this order:
// 1. defaultMimeEntries array
// 2. User-set preferences (managed by the handler service)
// 3. OS-provided information
// 4. our "extras" array
// 5. Information from plugins
// 6. The "ext-to-type-mapping" category
हार्ड-कोडित सूची पहले फ़ाइल में आती है, कहीं रेखा 441 के पास है। आप देख रहे हैं defaultMimeEntries
और extraMimeEntries
।
मेरे वर्तमान प्रोफ़ाइल के साथ, ब्राउज़र रिपोर्ट करेगा text/csv
क्योंकि इसमें इसके लिए एक प्रविष्टि है mimeTypes.rdf
(ऊपर की सूची में आइटम 2)। एक ताज़ा प्रोफ़ाइल के साथ, जिसमें यह प्रविष्टि नहीं है, ब्राउज़र रिपोर्ट करेगा application/vnd.ms-excel
(सूची में आइटम 3)।
सारांश
ब्राउज़रों में हार्ड-कोडित सूचियाँ बहुत सीमित हैं। अक्सर, ब्राउज़र द्वारा भेजा गया MIME प्रकार OS द्वारा रिपोर्ट किया गया एक होगा। और यह वास्तव में ऐसा क्यों है, जैसा कि प्रश्न में कहा गया है, ब्राउज़र द्वारा रिपोर्ट किया गया MIME प्रकार अविश्वसनीय है।