← Dukan kayan aiki

Jagorar Nau'ukan MIME

Menene nau'ukan MIME, yadda tsarin type/subtype ke aiki, inda Content-Type ke da muhimmanci a HTTP da imel, nau'uka na kowa, da dalilin da ke sa kuskure ya lalata abubuwa.
TsawaitaNau'in MIME

Menene MIME type a zahiri

MIME type, wanda ake kira media type ma, gajeriyar lakabi ce da ke gaya wa software wane irin bayanai fayil ko sakon jiki ke ɗauke da su. An haife shi ne a imel (sunan yana nufin Multipurpose Internet Mail Extensions) amma yau yana bayyana ko’ina a yanar gizo. Tsarin koyaushe shine type/subtype: babban rukuni, tare da alamar slash, sannan wani takamaiman tsari. Don haka text/html tana nufin "rubutu, a tsarin HTML", image/png tana nufin "hoto, a tsarin PNG", kuma application/json tana nufin "bayanan manhaja, wanda aka rubuta a matsayin JSON".

Babban matakin type yana fitowa daga jerin da aka gyara wanda IANA, hukumar rijista ta hukuma, take gudanarwa: text, image, audio, video, application, font, model, multipart, da wasu sabbi kamar haptics. Subtype shine takamaiman tsarin. Masu sayarwa za su iya ƙara nasu ta amfani da farkon vnd. (misali application/vnd.ms-excel), kuma tsare-tsaren gwaji a tarihi sun yi amfani da farkon x-, ko da yake ba a ƙara ƙarfafa wannan al’ada ba yanzu.

Alamomin fayil masu walƙiya waɗanda aka jera zuwa faifan rukunoni masu lakabi a kan bango mai duhun indigo
Kowane tsarin fayil yana da alaƙa da lakabin type/subtype.

Inda MIME type ke da muhimmanci

Wurin da ya fi muhimmanci wanda MIME type ke bayyana a ciki shine sashin martani na HTTP na Content-Type. Idan uwar garke ta aika shafi, hoto, ko bayanan API, wannan sashin yana gaya wa burauza yadda za a fassara bytes ɗin. Idan sashin ya ce text/html, burauza tana zana rubutun; idan ya ce application/json, kiran fetch() zai iya tantance shi; idan ya ce application/pdf, na’urar kallo da aka gina za ta buɗe. Sashin nan iri ɗaya yana tafiya a gefen buƙata ma: idan ka aika fam ko bayanan API ta hanyar POST, Content-Type tana gaya wa uwar garke yadda za ta karanta abin da ka aika.

Bayan HTTP, MIME types suna tafiyar da wasu tsarurruka daban-daban. Manhajojin imel suna amfani da su domin ƙayyade ko wani abin haɗe shi hoto ne mai buƙatar kallo ko fayil ne mai buƙatar ajiya. Masu sarrafa loda-fayil suna duba nau’in da aka bayyana domin karɓa ko ƙi fayiloli. Kuma tsarin aiki ko burauza suna amfani da nau’in, ba wai kawai suna fayil ba, domin zaɓar manhaja ta asali. Ra’ayin nan iri ɗaya shine ke tallafawa yadda uwar garke ke bayar da rahoton sakamako da kuskure tare da lambobin matsayi na HTTP — martanin 200 mai kuskuren nau’i zai iya zama gurɓatacce kamar 404.

Nau’o’in da za ka yi amfani da su kowace rana

Wasu ƴan nau’o’i ne suke ɗaukar mafi yawan zirga-zirga na gaskiya:

  • text/html — shafukan yanar gizo (fadada .html)
  • text/css — takardun salo (.css)
  • text/javascript — nau’in da aka shawarta domin JavaScript (.js, .mjs)
  • application/json — nau’in JSON hukuma ɗaya tak, wanda aka ƙayyade a RFC 8259 (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — tsare-tsaren hoto na kowa
  • application/pdf — takardun PDF (.pdf)
  • application/octet-stream — nau’in gama-gari domin bayanan binary da ba a sani ba ko na kowane iri
  • text/plain — tsohuwar don rubutu mai sauƙi wanda ba shi da wani nau’i mai zurfi

JSON tana bukatar bayani domin tana ruɗar mutane. Nau’i ɗaya tak daidai shine application/json. Tsohon lambar sau da yawa yana amfani da text/json, text/plain, ko application/x-javascript, amma waɗannan sun tsufa kuma wasu abokan ciniki za su ƙi tantance su. Babu wani sigar charset domin JSON ma — ka’idar tana bukatar UTF-8, don haka rubuta application/json; charset=utf-8 abu ne mai maimaituwa ko da yake ba shi da illa. Domin cikakken tebur na tsare-tsare da fadada, duba tebur ɗin bayanai namu.

Wani fakitin bayanai mai walƙiya wanda aka lakaba da alama mai zurfi wanda ke gudana ta hanyar sadarwa
Content-Type yana tafiya tare da payload ta HTTP.

Me ya sa kuskuren Content-Type ke lalata abubuwa

Burauzoji da abokan ciniki suna amincewa da nau’in da aka bayyana, don haka rashin daidaita shi na haifar da sakamako na gaske. Idan ka aika martanin JSON API a matsayin text/html, burauza za ta iya ƙoƙarin zana shi, ko kuma abokin ciniki mai tsauri zai jefa kuskuren tantancewa kafin lambarka ta yi aiki. Idan ka aika fayil na CSS ko JavaScript da kuskuren nau’i, wani fasalin tsaro mai suna X-Content-Type-Options: nosniff zai sa burauza ta ƙi aiwatar da shi, wanda zai lalata salon shafinka ko lambobinka a shiru.

Sauke-fayil su ne wani gazawa na gargajiya. Idan kana son fayil ya sauka maimakon ya bayyana, nau’in yana da muhimmanci tare da sashin Content-Disposition. PDF da aka aika a matsayin application/octet-stream yana saukowa a matsayin fayil na gama-gari maimakon buɗewa a mai kallo; hoto da aka aika a matsayin text/plain yana bayyana a matsayin haruffa marasa ma’ana. A gefen loda, fayil da ba a lakabta daidai ba na iya wucewa ta gwajin fadada mai sauƙi, shi ya sa masu tantancewa masu ƙarfi suke duba ainihin bytes (wanda ake kira "magic number") maimakon amincewa da nau’in da abokin ciniki ya bayar.

A tarihi, burauzoji sukan yi ƙoƙarin hasashe, ko "sniff", ainihin nau’in idan sashin ya bayyana kuskure. Wannan hali ya haifar da rami-rami na tsaro, don haka mafi kyawun al’ada ta zamani ita ce koyaushe a aika daidai Content-Type kuma a kashe sniffing tare da nosniff. A taƙaice: ka daidaita nau’in da gangan a kan kowane martani, sannan yawancin kwarrai na zanawa, sauke-fayil, da tantancewa za su ɓace.

Tambayoyin da Akan Yawaita Yi

Menene bambanci tsakanin MIME type da media type?

Abu ɗaya ne. "MIME type" tsohon suna ne daga imel, yayin da "media type" kalma ce da IANA da ka’idojin HTTP na zamani suka fi so. Dukansu suna nufin lakabin type/subtype.

Menene daidaitaccen MIME type domin JSON?

Shi ne application/json, wanda aka ƙayyade a RFC 8259. Tsofaffin madadai kamar text/json ko application/x-javascript sun tsufa kuma wasu abokan ciniki za su ƙi su.

Menene ma'anar application/octet-stream?

Nau’i ne na gama-gari domin bayanan binary na kowane iri babu wani lakabi mai zurfi. Uwar garke suna amfani da shi a matsayin madadi domin tsare-tsaren fayil da ba a sani ba, wanda yawanci yakan haifar da sauke-fayil maimakon nunawa a cikin burauza.

Me ya sa fayil na CSS ko JavaScript naina baya lodawa?

Sau da yawa uwar garke tana aika shi da kuskuren Content-Type. Idan X-Content-Type-Options aka saita zuwa nosniff, burauza tana ƙin aiwatar da CSS wanda ba text/css ba ne ko lambobin da ba nau’in JavaScript ba ne. Gyara tsarin uwar garke domin a aika daidaitaccen nau’i.

Zan iya ƙara charset zuwa MIME type?

Eh, domin tsare-tsaren rubutu, ta amfani da siga kamar text/html; charset=utf-8. Domin JSON ba bukata ba ce domin tsarin koyaushe UTF-8 ne bisa ƙa’ida, ko da yake ƙara shi baya haifar da illa.

Shin fadadar fayil ke ƙayyade MIME type?

Ba a kan HTTP ba. Uwar garke ce ke yanke shawarar wace Content-Type za a aika, kuma burauza tana amincewa da wannan sashin. Fadadar tana aiki ne kawai a matsayin shawara ga kayan aiki da tsarin aiki idan babu takamaiman nau’i da aka bayar.