Chrome
Chrome (версія 38 на момент написання) має 3 способи визначити тип MIME і робить це в певному порядку. Фрагмент нижче - з файлу 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).
Приклад: під час завантаження файлу CSV із системи Windows із встановленим Microsoft Excel Chrome повідомляє про це як application/vnd.ms-excel. Це пов’язано з тим, що .csvце не вказано в першому кодованому списку, тому браузер повертається до системного реєстру. HKEY_CLASSES_ROOT\.csvмає значення з іменем Content Type, для якого встановлено application/vnd.ms-excel.
Internet Explorer
Знову ж, використовуючи той самий приклад, браузер подасть звіт application/vnd.ms-excel. Думаю, розумно припустити, що Internet Explorer (версія 11 на момент написання) використовує реєстр. Можливо, він також використовує жорстко закодований список, такий як Chrome і Firefox, але його закрите джерело ускладнює перевірку.
Firefox
Як зазначено в коді Chrome, Firefox (версія 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, що надсилається браузером, буде типом, про який повідомляє ОС. І саме тому, як зазначено у питанні, тип MIME, про який повідомляє браузер, є ненадійним.