Chrom
Chrome (Version 38 zum Zeitpunkt des Schreibens) bietet drei Möglichkeiten, um den MIME-Typ zu bestimmen, und zwar in einer bestimmten Reihenfolge. Das folgende Snippet stammt aus der Datei src/net/base/mime_util.cc
, Methode 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.
Die fest codierten Listen befinden sich etwas früher in der Datei: https://cs.chromium.org/chromium/src/net/base/mime_util.cc?l=170 ( kPrimaryMappings
und kSecondaryMappings
).
Ein Beispiel: Wenn Sie eine CSV-Datei von einem Windows-System mit installiertem Microsoft Excel hochladen, meldet Chrome dies als application/vnd.ms-excel
. Dies liegt daran, dass .csv
in der ersten fest codierten Liste nichts angegeben ist, sodass der Browser auf die Systemregistrierung zurückgreift. HKEY_CLASSES_ROOT\.csv
hat einen Wert namens Content Type
, der auf gesetzt ist application/vnd.ms-excel
.
Internet Explorer
Wiederum mit demselben Beispiel meldet der Browser application/vnd.ms-excel
. Ich denke, es ist vernünftig anzunehmen, dass Internet Explorer (Version 11 zum Zeitpunkt des Schreibens) die Registrierung verwendet. Möglicherweise wird auch eine fest codierte Liste wie Chrome und Firefox verwendet, die jedoch aufgrund ihrer Closed-Source-Natur schwer zu überprüfen ist.
Feuerfuchs
Wie im Chrome-Code angegeben, funktioniert Firefox (Version 32 zum Zeitpunkt des Schreibens) auf ähnliche Weise. Ausschnitt aus Datei uriloader\exthandler\nsExternalHelperAppService.cpp
, MethodensExternalHelperAppService::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
Die fest codierten Listen befinden sich früher in der Datei, irgendwo in der Nähe von Zeile 441. Sie suchen nach defaultMimeEntries
und extraMimeEntries
.
Bei meinem aktuellen Profil meldet der Browser, text/csv
weil in mimeTypes.rdf
(Punkt 2 in der obigen Liste) ein Eintrag dafür vorhanden ist . Bei einem neuen Profil, das diesen Eintrag nicht enthält, meldet der Browser application/vnd.ms-excel
(Punkt 3 in der Liste).
Zusammenfassung
Die fest codierten Listen in den Browsern sind ziemlich begrenzt. Häufig ist der vom Browser gesendete MIME-Typ der vom Betriebssystem gemeldete. Und genau aus diesem Grund ist der vom Browser gemeldete MIME-Typ, wie in der Frage angegeben, unzuverlässig.