Co je to vlastně MIME typ
MIME typ, nazývaný také media type, je krátký popisek, který softwaru sděluje, jaký druh dat soubor nebo tělo zprávy obsahuje. Vznikl u e-mailu (název vychází z Multipurpose Internet Mail Extensions), ale dnes se objevuje všude na webu. Formát je vždy typ/podtyp: obecná kategorie, lomítko a konkrétní formát. Takže text/html znamená "text ve formátu HTML", image/png znamená "obrázek ve formátu PNG" a application/json znamená "aplikační data kódovaná jako JSON".
Nejvyšší úroveň, typ, pochází z pevné množiny udržované organizací IANA, oficiálním registrem: text, image, audio, video, application, font, model, multipart a několik novějších, například haptics. Podtyp je konkrétní formát. Dodavatelé mohou přidávat vlastní s prefixem vnd. (například application/vnd.ms-excel) a experimentální typy historicky používaly prefix x-, i když tato konvence se dnes nedoporučuje.

Kde na MIME typech záleží
Nejdůležitější místo, kde se MIME typ objevuje, je HTTP hlavička odpovědi Content-Type. Když server odesílá stránku, obrázek nebo API payload, tato hlavička sdělí prohlížeči, jak byty interpretovat. Pokud hlavička uvádí text/html, prohlížeč vykreslí značkování; pokud uvádí application/json, může to volání fetch() zpracovat; pokud uvádí application/pdf, otevře se vestavěná prohlížečka. Stejná hlavička cestuje i na straně požadavku: když odešlete formulář nebo tělo API metodou POST, Content-Type sdělí serveru, jak má přečíst to, co jste poslali.
Kromě HTTP řídí MIME typy i další systémy. E-mailoví klienti podle nich rozhodují, zda je příloha obrázek k náhledu, nebo binární soubor k uložení. Nástroje pro nahrávání souborů kontrolují deklarovaný typ, aby soubory přijaly, nebo odmítly. Operační systém či prohlížeč používá k volbě výchozí aplikace typ, nikoli jen příponu souboru. Stejná myšlenka stojí za tím, jak servery hlásí výsledky a chyby vedle HTTP stavových kódů — odpověď 200 se špatným typem může být stejně rozbitá jako 404.
Ty, které využijete každý den
Hrstka typů pokrývá naprostou většinu skutečného provozu:
text/html— webové stránky (přípona.html)text/css— stylové předpisy (.css)text/javascript— doporučený typ pro JavaScript (.js,.mjs)application/json— jediný oficiální typ pro JSON, definovaný v RFC 8259 (.json)image/png,image/jpeg,image/webp,image/svg+xml— běžné formáty obrázkůapplication/pdf— dokumenty PDF (.pdf)application/octet-stream— univerzální typ pro neznámá nebo libovolná binární datatext/plain— výchozí typ pro prostý text bez bohatšího určení
JSON si zaslouží poznámku, protože lidi často zaskočí. Jediný správný typ je application/json. Starší kód někdy používal text/json, text/plain nebo application/x-javascript, ale ty jsou zastaralé a někteří klienti je odmítnou zpracovat. Pro JSON neexistuje ani parametr charset — specifikace předepisuje UTF-8, takže zápis application/json; charset=utf-8 je nadbytečný, i když neškodí. Úplnější tabulku formátů a přípon najdete v našich referenčních tabulkách.

Proč špatný Content-Type způsobuje problémy
Prohlížeče a klienti deklarovanému typu důvěřují, takže jeho chybné nastavení má konkrétní důsledky. Pošlete-li odpověď JSON API jako text/html, prohlížeč se ji může pokusit vykreslit, nebo přísný klient vyhodí chybu parsování dřív, než se váš kód vůbec spustí. Pošlete-li soubor CSS nebo JavaScript se špatným typem, bezpečnostní funkce X-Content-Type-Options: nosniff způsobí, že jej prohlížeč odmítne použít, čímž tiše rozbije styl stránky nebo skripty.
Stahování souborů je další typický zdroj problémů. Chcete-li, aby se soubor stáhl místo zobrazení, na typu záleží spolu s hlavičkou Content-Disposition. PDF odeslané jako application/octet-stream se stáhne jako obecný soubor místo otevření v prohlížečce; obrázek odeslaný jako text/plain se zobrazí jako změť znaků. Na straně nahrávání může špatně označený soubor snadno projít naivní kontrolou přípony, a proto robustní validátory kontrolují skutečné byty ("magické číslo"), a ne typ dodaný klientem.
Historicky se prohlížeče snažily uhodnout, neboli "čichat" (sniff), skutečný typ, pokud hlavička vypadala špatně. Toto chování ale způsobovalo bezpečnostní díry, takže moderní osvědčený postup je vždy odeslat přesný Content-Type a vypnout čichání pomocí nosniff. Ve zkratce: nastavte typ vědomě u každé odpovědi a většina chyb ve vykreslování, stahování a parsování zmizí.
Často kladené otázky
Jaký je rozdíl mezi MIME typem a media type?
Jde o totéž. "MIME typ" je starší název z e-mailu, zatímco "media type" je termín, který upřednostňuje IANA a moderní HTTP specifikace. Oba označují popisek typ/podtyp.
Jaký je správný MIME typ pro JSON?
Je to application/json, definovaný v RFC 8259. Starší alternativy jako text/json nebo application/x-javascript jsou zastaralé a někteří klienti je odmítnou.
Co znamená application/octet-stream?
Je to obecný typ pro libovolná binární data bez konkrétnějšího označení. Servery jej používají jako záložní řešení pro neznámé typy souborů, což obvykle vyvolá stažení místo zobrazení v prohlížeči.
Proč se mi nenačítá soubor CSS nebo JavaScript?
Server jej často odesílá se špatným Content-Type. Když je nastaveno X-Content-Type-Options na nosniff, prohlížeč odmítne použít CSS, které není text/css, nebo skripty, které nejsou typu JavaScript. Opravte konfiguraci serveru, aby se odesílal správný typ.
Mohu k MIME typu přidat charset?
Ano, u textových formátů, pomocí parametru jako text/html; charset=utf-8. U JSON je to zbytečné, protože formát je podle specifikace vždy UTF-8, i když jeho přidání nijak neškodí.
Určuje MIME typ přípona souboru?
Přes HTTP ne. O tom, jaký Content-Type se odešle, rozhoduje server, a prohlížeč této hlavičce důvěřuje. Přípona slouží jen jako nápověda pro nástroje a operační systémy, pokud není zadán explicitní typ.
