← Zana zote

Rejeleo la Aina za MIME

Aina za MIME ni nini, jinsi muundo wa type/subtype unavyofanya kazi, Content-Type inapofaa katika HTTP na barua pepe, aina za kawaida, na kwa nini isiyo sahihi huvuruga mambo.
KiendeleziAina ya MIME

Aina ya MIME ni nini hasa

Aina ya MIME, pia inaitwa aina ya midia (media type), ni lebo fupi inayoambia programu ni aina gani ya data iliyomo kwenye faili au ujumbe. Ilizaliwa kwenye barua pepe (jina linatokana na Multipurpose Internet Mail Extensions) lakini leo inaonekana kila mahali kwenye wavuti. Muundo daima ni aina/aina-ndogo: kundi kubwa, mkato (slash), na muundo mahususi. Hivyo text/html inamaanisha "maandishi, katika mfumo wa HTML", image/png inamaanisha "picha, katika mfumo wa PNG", na application/json inamaanisha "data ya programu, iliyosimbwa kama JSON".

Aina ya juu zaidi (type) inatoka kwenye seti maalum inayosimamiwa na IANA, orodha rasmi: text, image, audio, video, application, font, model, multipart, na chache mpya kama haptics. Aina-ndogo (subtype) ni muundo mahususi. Wauzaji wanaweza kuongeza zao wenyewe kwa kiambishi cha vnd. (kwa mfano application/vnd.ms-excel), na aina za majaribio kihistoria zilitumia kiambishi cha x-, ingawa desturi hiyo sasa haihimizwi.

Ikoni za dhahania za miundo ya faili zinazong'aa zikiwa zimepangwa katika vigae vya makundi vilivyoandikwa kwenye mandhari ya indigo iliyokolea
Kila muundo wa faili unaunganishwa na lebo ya aina/aina-ndogo.

Mahali aina za MIME zinapohitajika

Mahali muhimu zaidi ambapo aina ya MIME inaonekana ni kichwa cha jibu cha HTTP Content-Type. Seva inapotuma ukurasa, picha, au data ya API, kichwa hiki humwambia kivinjari jinsi ya kutafsiri baiti hizo. Ikiwa kichwa kinasema text/html, kivinjari hutoa alama za html; ikiwa kinasema application/json, wito wa fetch() unaweza kuichambua; ikiwa kinasema application/pdf, kitazamaji cha ndani hufunguka. Kichwa kilekile husafiri upande wa ombi pia: unapopeleka fomu au data ya API kwa POST, Content-Type humwambia seva jinsi ya kusoma ulichotuma.

Zaidi ya HTTP, aina za MIME zinaendesha mifumo mingine kadhaa. Programu za barua pepe hutumia kuamua kama kiambatisho ni picha ya kuonyesha awali au faili ya jumla ya kuhifadhi. Vishughulikizi vya kupakia faili huchunguza aina iliyotangazwa ili kukubali au kukataa faili. Na mfumo wa uendeshaji au kivinjari hutumia aina, siyo kiambishi cha faili tu, kuchagua programu chaguo-msingi. Wazo hilohilo ndilo linaloendesha jinsi seva zinavyoripoti matokeo na makosa pamoja na kanuni za hali ya HTTP — jibu la 200 lenye aina isiyo sahihi laweza kuwa lenye tatizo kama la 404.

Zile utakazozitumia kila siku

Kundi dogo la aina hushughulikia sehemu kubwa ya trafiki halisi:

  • text/html — kurasa za wavuti (kiambishi .html)
  • text/css — mitindo ya kurasa (.css)
  • text/javascript — aina inayopendekezwa kwa JavaScript (.js, .mjs)
  • application/json — aina moja rasmi ya JSON, iliyofafanuliwa katika RFC 8259 (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — miundo ya kawaida ya picha
  • application/pdf — hati za PDF (.pdf)
  • application/octet-stream — aina ya jumla kwa data ya binary isiyojulikana au ya aina yoyote
  • text/plain — chaguo-msingi kwa maandishi sahili yasiyo na aina maalum zaidi

JSON inastahili kutajwa kwa sababu huwakanganya watu. Aina sahihi pekee ni application/json. Msimbo wa zamani wakati mwingine ulitumia text/json, text/plain, au application/x-javascript, lakini hizo ni za kizamani na baadhi ya wateja watakataa kuzichambua. Pia hakuna kigezo cha charset kwa JSON — kiwango kinaagiza UTF-8, hivyo kuandika application/json; charset=utf-8 ni cha ziada ingawa hakidhuru. Kwa jedwali kamili zaidi la miundo na viambishi, angalia majedwali yetu ya rejea.

Pakiti ya data inayong'aa yenye lebo ya aina dhahania ikitiririka kwenye muunganisho wa mtandao
Content-Type husafiri pamoja na mzigo wa data kupitia HTTP.

Kwa nini Content-Type isiyo sahihi huvunja mambo

Vivinjari na wateja huamini aina iliyotangazwa, hivyo kuikosea kunaleta madhara halisi. Tuma jibu la API ya JSON kama text/html na kivinjari kinaweza kujaribu kulionyesha, au mteja mkali anaweza kutupa kosa la uchambuzi kabla msimbo wako haujafanya kazi. Tuma faili ya CSS au JavaScript kwa aina isiyo sahihi na kipengele cha usalama kiitwacho X-Content-Type-Options: nosniff kitafanya kivinjari kikatae kukitumia, na hivyo kuvunja kimyakimya mtindo au misimbo ya ukurasa wako.

Upakuaji ni kushindwa kwingine kwa kawaida. Ukitaka faili ipakuliwe badala ya kuonyeshwa, aina ina umuhimu pamoja na kichwa cha Content-Disposition. PDF iliyotumwa kama application/octet-stream hupakuliwa kama faili ya jumla badala ya kufunguka kwenye kitazamaji; picha iliyotumwa kama text/plain huonekana kama herufi zisizoeleweka. Kwa upande wa upakiaji, faili yenye lebo isiyo sahihi inaweza kupita ukaguzi rahisi wa kiambishi, ndiyo maana vithibitisho imara hukagua baiti halisi ("magic number") badala ya kuamini aina iliyotolewa na mteja.

Kihistoria, vivinjari vilijaribu kukisia, au "kunusa" (sniff), aina halisi wakati kichwa kilionekana kisicho sahihi. Tabia hiyo ilisababisha mianya ya usalama, hivyo desturi bora ya kisasa ni kutuma Content-Type sahihi daima na kuzima kunusa kwa nosniff. Kwa ufupi: weka aina kwa makusudi kwenye kila jibu, na hitilafu nyingi za uonyeshaji, upakuaji, na uchambuzi hupotea.

Maswali yanayoulizwa mara kwa mara

Kuna tofauti gani kati ya aina ya MIME na aina ya midia?

Ni kitu kilekile. "Aina ya MIME" ni jina la zamani kutoka barua pepe, wakati "aina ya midia" ni istilahi inayopendelewa na IANA na viwango vya kisasa vya HTTP. Zote mbili zinarejelea lebo ya aina/aina-ndogo.

Aina sahihi ya MIME kwa JSON ni ipi?

Ni application/json, iliyofafanuliwa katika RFC 8259. Mbadala za zamani kama text/json au application/x-javascript ni za kizamani na baadhi ya wateja wataikataa.

application/octet-stream inamaanisha nini?

Ni aina ya jumla kwa data ya binary ya aina yoyote isiyo na lebo mahususi zaidi. Seva huitumia kama hifadhi ya akiba kwa aina za faili zisizojulikana, jambo ambalo kwa kawaida husababisha upakuaji badala ya kuonyeshwa kwenye kivinjari.

Kwa nini faili yangu ya CSS au JavaScript haipakii?

Mara nyingi seva inaituma kwa Content-Type isiyo sahihi. Ikiwa X-Content-Type-Options imewekwa kuwa nosniff, kivinjari hukataa kutumia CSS isiyo text/css au misimbo isiyo aina ya JavaScript. Rekebisha mipangilio ya seva ili aina sahihi itumwe.

Naweza kuongeza charset kwenye aina ya MIME?

Ndiyo, kwa miundo ya maandishi, kwa kutumia kigezo kama text/html; charset=utf-8. Kwa JSON haihitajiki kwa sababu muundo huo daima ni UTF-8 kwa kiwango, ingawa kuongeza hakudhuru.

Je, kiambishi cha faili huamua aina ya MIME?

Siyo kupitia HTTP. Seva ndiyo huamua Content-Type gani ya kutuma, na kivinjari huamini kichwa hicho. Kiambishi hufanya kazi kama dokezo tu kwa zana na mifumo ya uendeshaji wakati hakuna aina mahususi iliyotolewa.