Chrome
Chrome (versi 38 pada saat penulisan) memiliki 3 cara untuk menentukan jenis MIME dan melakukannya dalam urutan tertentu. Cuplikan di bawah ini berasal dari file src/net/base/mime_util.cc
, metode 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.
Daftar hard-coded muncul sedikit lebih awal di file: https://cs.chromium.org/chromium/src/net/base/mime_util.cc?l=170 ( kPrimaryMappings
dan kSecondaryMappings
).
Contoh: saat mengunggah file CSV dari sistem Windows dengan Microsoft Excel terpasang, Chrome akan melaporkannya sebagai application/vnd.ms-excel
. Ini karena .csv
tidak ditentukan dalam daftar kode keras pertama, sehingga browser kembali ke registri sistem. HKEY_CLASSES_ROOT\.csv
memiliki nilai bernama Content Type
yang disetel ke application/vnd.ms-excel
.
Internet Explorer
Sekali lagi menggunakan contoh yang sama, browser akan melaporkan application/vnd.ms-excel
. Saya pikir masuk akal untuk menganggap Internet Explorer (versi 11 saat penulisan) menggunakan registri. Mungkin itu juga menggunakan daftar hard-coded seperti Chrome dan Firefox, tetapi sifatnya yang closed source membuatnya sulit untuk diverifikasi.
Firefox
Seperti yang ditunjukkan dalam kode Chrome, Firefox (versi 32 pada saat penulisan) bekerja dengan cara yang sama. Cuplikan dari file uriloader\exthandler\nsExternalHelperAppService.cpp
, metodensExternalHelperAppService::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
Daftar hard-coded muncul lebih awal dalam file, dekat baris 441. Anda sedang mencari defaultMimeEntries
dan extraMimeEntries
.
Dengan profil saya saat ini, browser akan melaporkan text/csv
karena ada entri untuk profil itu di mimeTypes.rdf
(item 2 di daftar di atas). Dengan profil baru, yang tidak memiliki entri ini, browser akan melaporkan application/vnd.ms-excel
(item 3 dalam daftar).
Ringkasan
Daftar hard-coded di browser sangat terbatas. Seringkali, jenis MIME yang dikirim oleh browser adalah yang dilaporkan oleh OS. Dan inilah tepatnya mengapa, seperti yang dinyatakan dalam pertanyaan, tipe MIME yang dilaporkan oleh browser tidak dapat diandalkan.