← Összes eszköz

MIME Típusok Referencia

Mik a MIME típusok, hogyan működik a típus/altípus formátum, hol számít a Content-Type HTTP-ben és e-mailben, gyakori típusok, és miért okoz hibát a rossz típus.
KiterjesztésMIME típus

Mi is valójában egy MIME-típus

A MIME-típus, más néven médiatípus, egy rövid címke, amely megmondja a szoftvernek, milyen fajta adatot tartalmaz egy fájl vagy egy üzenettörzs. Az e-mailben született (a rövidítés a Multipurpose Internet Mail Extensions kifejezésből ered), de mára szinte mindenütt megjelenik a weben. A formátum mindig típus/altípus: egy tág kategória, egy perjel, majd egy konkrét formátum. Így a text/html azt jelenti, hogy "szöveg, HTML formában", az image/png azt, hogy "kép, PNG formában", az application/json pedig azt, hogy "alkalmazásadat, JSON kódolással".

A legfelső szintű típus egy rögzített, az IANA, a hivatalos nyilvántartó szervezet által karbantartott halmazból származik: text, image, audio, video, application, font, model, multipart, és néhány újabb, mint a haptics. Az altípus a konkrét formátum. A gyártók a saját altípusaikat vnd. előtaggal adhatják hozzá (például application/vnd.ms-excel), a kísérleti típusok pedig hagyományosan x- előtagot kaptak, bár ezt a szokást ma már nem ajánlott követni.

Absztrakt, izzó fájlformátum-ikonok, kategóriákba rendezett, felcímkézett csempéken, sötét indigó háttéren
Minden fájlformátum egy típus/altípus címkére képződik le.

Hol számít igazán a MIME-típus

A legfontosabb hely, ahol egy MIME-típus megjelenik, a HTTP Content-Type válaszfejléc. Amikor a szerver egy oldalt, egy képet vagy egy API-választ küld, ez a fejléc mondja meg a böngészőnek, hogyan értelmezze a bájtokat. Ha a fejléc text/html-t ír, a böngésző jelölőnyelvet renderel; ha application/json-t, egy fetch() hívás fel tudja dolgozni; ha application/pdf-et, megnyílik a beépített megjelenítő. Ugyanez a fejléc a kérés oldalán is jelen van: amikor egy űrlapot vagy API-törzset POST-olunk, a Content-Type mondja meg a szervernek, hogyan olvassa be a küldött adatot.

A HTTP-n túl a MIME-típusok más rendszereket is vezérelnek. Az e-mail-kliensek ezek alapján döntik el, hogy egy melléklet előnézetben megjeleníthető kép-e, vagy inkább mentendő bináris fájl. A feltöltéskezelők a deklarált típust vizsgálva fogadják el vagy utasítják el a fájlokat. Az operációs rendszer vagy a böngésző pedig nem csak a fájlkiterjesztés, hanem a típus alapján választja ki az alapértelmezett alkalmazást. Ugyanez az elv áll amögött is, ahogyan a szerverek az eredményeket és hibákat a HTTP állapotkódokkal együtt jelentik — egy rossz típussal érkező 200-as válasz épp annyira lehet hibás, mint egy 404-es.

Amelyekkel nap mint nap találkozunk

Néhány típus lefedi a valódi forgalom túlnyomó részét:

  • text/html — weboldalak (.html kiterjesztés)
  • text/css — stíluslapok (.css)
  • text/javascript — a JavaScripthez ajánlott típus (.js, .mjs)
  • application/json — az egyetlen hivatalos JSON-típus, az RFC 8259-ben definiálva (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — gyakori képformátumok
  • application/pdf — PDF-dokumentumok (.pdf)
  • application/octet-stream — gyűjtőkategória ismeretlen vagy tetszőleges bináris adathoz
  • text/plain — az alapértelmezett típus egyszerű szöveghez, amelynek nincs gazdagabb formátuma

A JSON külön említést érdemel, mert sokakat megzavar. Az egyetlen helyes típus az application/json. Régebbi kódokban néha text/json, text/plain vagy application/x-javascript szerepelt, de ezek elavultak, és egyes kliensek elutasítják a feldolgozásukat. A JSON-hoz nincs is charset paraméter — a specifikáció mindig UTF-8-at ír elő, így az application/json; charset=utf-8 felesleges, bár ártalmatlan. A formátumok és kiterjesztések teljesebb táblázatáért nézze meg referencia-táblázatainkat.

Egy izzó adatcsomag, absztrakt típusjelvénnyel megjelölve, amely egy hálózati kapcsolaton áramlik át
A Content-Type a hasznos adattal együtt utazik a HTTP-n keresztül.

Miért okoz problémát egy rossz Content-Type

A böngészők és kliensek megbíznak a deklarált típusban, ezért ha az hibás, annak konkrét következményei vannak. Ha egy JSON API-választ text/html-ként küldünk, a böngésző megpróbálhatja renderelni, vagy egy szigorú kliens még azelőtt feldolgozási hibát dob, hogy a kódunk lefutna. Ha egy CSS- vagy JavaScript-fájlt rossz típussal küldünk, egy biztonsági funkció, az X-Content-Type-Options: nosniff, megakadályozza, hogy a böngésző alkalmazza azt, csendben elrontva az oldal stílusát vagy szkriptjeit.

A letöltések a másik klasszikus hibaforrás. Ha azt szeretnénk, hogy egy fájl letöltődjön ahelyett, hogy megjelenne, a típus a Content-Disposition fejléccel együtt számít. Egy application/octet-stream-ként küldött PDF általános fájlként töltődik le, ahelyett hogy megnyílna a megjelenítőben; egy text/plain-ként küldött kép értelmezhetetlen karaktersorozatként jelenik meg. A feltöltés oldalán egy hibásan címkézett fájl könnyen átcsúszhat egy naiv kiterjesztés-ellenőrzésen, ezért a megbízható validátorok a valódi bájtokat (az úgynevezett "mágikus számot") vizsgálják, nem a kliens által megadott típust.

Régebben a böngészők megpróbálták kitalálni, "megszimatolni" a valódi típust, ha a fejléc hibásnak tűnt. Ez a viselkedés biztonsági réseket okozott, ezért a modern legjobb gyakorlat az, hogy mindig pontos Content-Type-ot küldünk, és a szimatolást a nosniff beállítással letiltjuk. Röviden: állítsuk be tudatosan a típust minden válasznál, és a legtöbb megjelenítési, letöltési és feldolgozási hiba magától eltűnik.

Gyakran ismételt kérdések

Mi a különbség a MIME-típus és a médiatípus között?

Ugyanaz a kettő. A "MIME-típus" a régebbi, e-mailből származó elnevezés, míg a "médiatípus" az a kifejezés, amelyet az IANA és a modern HTTP-specifikációk előnyben részesítenek. Mindkettő a típus/altípus címkére utal.

Mi a helyes MIME-típus a JSON-hoz?

Az application/json, amelyet az RFC 8259 definiál. A régebbi alternatívák, mint a text/json vagy az application/x-javascript, elavultak, és egyes kliensek elutasítják őket.

Mit jelent az application/octet-stream?

Ez az általános típus tetszőleges bináris adathoz, amelyhez nincs pontosabb címke. A szerverek tartalék típusként használják ismeretlen fájlformátumokhoz, ami általában letöltést vált ki a böngészőben történő megjelenítés helyett.

Miért nem töltődik be a CSS- vagy JavaScript-fájlom?

Gyakran a szerver rossz Content-Type-tal küldi. Ha az X-Content-Type-Options nosniff-re van állítva, a böngésző nem alkalmazza azt a CSS-t, amely nem text/css, és azt a szkriptet, amely nem JavaScript-típusú. Javítsa a szerver beállítását, hogy a megfelelő típus menjen ki.

Adhatok charsetet egy MIME-típushoz?

Igen, szöveges formátumoknál, olyan paraméterrel, mint a text/html; charset=utf-8. JSON-nál felesleges, mert a formátum a specifikáció szerint mindig UTF-8, bár a hozzáadása nem árt.

A fájlkiterjesztés határozza meg a MIME-típust?

HTTP-n keresztül nem. A szerver dönti el, milyen Content-Type-ot küld, és a böngésző megbízik ebben a fejlécben. A kiterjesztés csak akkor szolgál útmutatóként az eszközök és operációs rendszerek számára, ha nincs megadva kifejezett típus.