Slovník pojmů

MIME typ

MIME typ určuje, jaký druh obsahu zpráva nebo soubor představuje. Pomáhá vybrat správný parser, vykreslení či způsob stažení, ale není bezpečnostním důkazem obsahu ani oprávnění k jeho otevření.

Stručná definice

Dohoda o formátu obsahu, ne pouhá přípona souboru.

Název MIME vznikl z Multipurpose Internet Mail Extensions, ale dnes se častěji používá obecnější termín media type. Zápis má podobu type/subtype, například text/html, application/json nebo image/png. Může mít také parametr, typicky charset=utf-8, který u textového obsahu upřesňuje znakové kódování.

Ve webové komunikaci server obvykle posílá Content-Type v HTTP odpovědi a klient uvádí Content-Type u request body. Hlavička Accept naopak vyjadřuje, jaké podoby odpovědi klient umí zpracovat. Tyto údaje dávají komunikaci společný jazyk, ale aplikace stále validuje data, velikost a oprávnění samostatně.

Jaký problém řeší

Aby obě strany věděly, jak tělo zprávy nebo soubor interpretovat.

Bez informace o typu by prohlížeč, API klient i server musely formát obsahu odhadovat podle souboru nebo vlastního pravidla.

  • prohlížeč rozliší HTML dokument, CSS, JavaScript, obrázek, písmo a soubor ke stažení
  • API zvolí JSON nebo XML parser a může odmítnout tělo v nepodporovaném formátu
  • upload služba určí pravidla pro dokument, obrázek nebo jiný přípustný soubor
  • export objednávek sdělí, zda odpověď tvoří CSV, PDF nebo JSON s chybou
  • HTTP cache a bezpečnostní pravidla pracují se skutečným typem vraceného obsahu

Praktický příklad

JSON API a export objednávek používají rozdílné typy odpovědi.

Administrace požádá API o detail objednávky a očekává JSON. Jiný endpoint nabízí export účetnímu; tam je vhodné označit soubor například text/csv s kódováním UTF-8. Klient nemá odhadovat obsah jen z názvu souboru nebo URL cesty.

Pokud uploadovaný soubor deklaruje image/png, server ještě provede vlastní kontrolu podle pravidel služby. Chybějící nebo podvržená hlavička tak nezmění nepřípustný soubor na bezpečný obrázek.

HTTP

GET /api/orders/ord_8f2c HTTP/1.1
Accept: application/json

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

Jak funguje

Typ obsahu propojí HTTP zprávu s odpovídajícím zpracováním.

Označení typu je metadata. Správný postup ověřuje hlavičku i skutečná data podle rizika konkrétní operace.

  1. Klient uvede očekávání Například Accept: application/json říká API, že klient očekává JSON. Server nemusí každé přání splnit, ale má odpovědět předvídatelně.
  2. Odesílatel popíše tělo Request s JSONem nese Content-Type: application/json. U formulářového uploadu se běžně používá multipart/form-data s oddělenými částmi.
  3. Server vybere parser Endpoint přijme jen formáty, které jeho kontrakt podporuje. Poté řeší syntaxi, limity velikosti, datové typy a autorizaci.
  4. Odpověď nese vlastní typ API může vrátit application/json, export text/csv a produktový obrázek image/jpeg. Prohlížeč podle typu zvolí vhodné zacházení.
  5. Klient obsah bezpečně zpracuje Typ pomáhá vybrat postup, nesmí však vést k bezmeznému spuštění nebo zobrazení nedůvěryhodného obsahu.

Důležité pojmy

Type, subtype, parametr a vyjednání odpovědi.

Běžné příklady jsou registrované u IANA, ale jejich použití vždy určuje i kontrakt konkrétního endpointu.

Content-Type

Hlavička popisuje formát těla právě přenášené zprávy. V odpovědi například text/html; charset=utf-8, v API application/json.

Accept

Hlavička požadavku vyjadřuje přijatelné typy odpovědi. Není totéž co Content-Type: nepopisuje odesílané body, ale preference klienta.

Text a znakové kódování

text/html, text/css a další textové typy mohou potřebovat charset. UTF-8 je pro moderní web obvyklá volba, ale typ a kódování jsou dvě rozdílné informace.

Media type a přípona

Přípona .png nebo .json je užitečná nápověda pro člověka a systém souborů. Server ji ale nemá považovat za důkaz obsahu, protože ji lze snadno změnit.

Obecná binární data

application/octet-stream označuje neurčená binární data. Neříká, že je soubor bezpečný, ani jak jej bezpečně otevřít nebo komu jej zpřístupnit.

Vztah k podobným pojmům

MIME typ popisuje formát; HTTP přenáší zprávu a API určuje její význam.

Tato hranice brání omylu, že typ obsahu sám zaručuje validní data či bezpečný upload.

HTTP hlavička
Content-Type a Accept jsou HTTP hlavičky. MIME typ je jejich běžná hodnota, nikoli celý mechanismus HTTP komunikace.
JSON a XML
JSON a XML jsou konkrétní datové formáty, které mohou být přeneseny jako application/json a application/xml. Platnost formátu nepopisuje business pravidla.
HTML a prohlížeč
Prohlížeč na základě text/html interpretuje dokument jako webovou stránku. Chybný typ může pokazit vykreslení nebo bezpečnostní očekávání.
API
API vedle formátu určuje endpoint, metodu, schéma, oprávnění a chybové odpovědi. Media type je jen jedna část kontraktu.

Výhody a omezení

Jasnější komunikace bez falešného pocitu bezpečí.

Přínosy

  • klient může zvolit správný parser nebo způsob zobrazení
  • server může odmítnout nepodporovaný formát před zbytečným zpracováním
  • dokumentace API je konkrétnější a exporty jsou pro uživatele předvídatelné
  • standardizované hodnoty zlepšují interoperabilitu mezi aplikacemi

Omezení a chyby

  • přípona souboru ani Content-Type poslaný klientem nejsou spolehlivý důkaz skutečného formátu
  • nesprávná hlavička může nechat prohlížeč obsah zobrazit nebo stáhnout jinak, než aplikace čeká
  • typ obsahu nevaliduje schéma JSONu, XML ani business pravidla
  • upload bez limitů, antivirové kontroly podle rizika a serverového ověření formátu zůstává nebezpečný
  • Content-Type nenahrazuje autentizaci a autorizaci souboru nebo endpointu

Praktické použití

Pro API i soubory používat přesné hodnoty a předvídatelné chyby.

Endpoint pro vytvoření objednávky může přijímat jen application/json a při jiném typu vrátit srozumitelnou chybu. Endpoint pro export naopak může podle explicitně podporovaného Accept vrátit text/csv nebo application/pdf. V obou případech je užitečné dokumentovat typ, kódování, velikostní limity a chování při neplatném těle.

U uploadu nestačí věřit hlavičce prohlížeče. Aplikace omezuje velikost, kontroluje skutečné signatury či obsah vhodným serverovým nástrojem, ukládá soubory mimo veřejný document root a rozhoduje o stažení podle oprávnění. Při zobrazování uživatelem nahraného obsahu je bezpečnější zvolit oddělenou doménu, bezpečné hlavičky nebo vynucené stažení podle konkrétního rizika.

Na co myslet

Formát kontrolovat na hranici systému a posílat ho konzistentně.

Nejvíce problémů vzniká tehdy, když název souboru, HTTP hlavička, skutečná data a dokumentace říkají něco jiného.

  • u API uvádět podporovaný Content-Type a Accept v kontraktu a testovat nepodporovaný formát
  • posílat JSON jako application/json a XML jako application/xml, nikoli spoléhat na příponu URL
  • u textového obsahu konzistentně používat a dokumentovat UTF-8
  • u uploadu ověřovat více vlastností souboru a nepouštět ho automaticky do aktivního zobrazení
  • neukládat citlivé exporty do veřejně přístupné cesty jen proto, že mají správný MIME typ
  • logovat metadata s ohledem na soukromí a nezapisovat bezdůvodně celý obsah requestu

Časté otázky

MIME typ v praxi

Je MIME typ totéž co přípona souboru?

Ne. Přípona je součást názvu souboru, MIME typ popisuje formát obsahu. Příponu i klientem odeslanou hlavičku lze změnit, proto je server nemá brát jako jedinou kontrolu.

Jaký je rozdíl mezi Content-Type a Accept?

Content-Type popisuje tělo právě odesílané zprávy. Accept vyjadřuje, které typy odpovědi klient dokáže nebo chce přijmout.

Je application/octet-stream bezpečný typ?

Ne. Označuje neurčená binární data. Nevypovídá o bezpečnosti, oprávnění ani konkrétním formátu souboru.

Stačí ověřit MIME typ uploadu v prohlížeči?

Nestačí. Kontroly v prohlížeči jsou pohodlí uživatele; server musí podle rizika ověřit velikost, skutečný obsah, uložení a pravidla přístupu.

Jak pracuji s API a výměnou dat

Přenosový formát propojuji s kontraktem, validací a bezpečným zpracováním.

U API a integračních scénářů řeším vedle typu obsahu také kompatibilitu, autentizaci a srozumitelné chybové stavy.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.