← Alle gereedskap

MIME-tipes-verwysing

Wat MIME-tipes is, hoe die tipe/subtipe-formaat werk, waar Content-Type in HTTP en e-pos saak maak, algemene tipes, en waarom 'n verkeerde een dinge breek.
UitbreidingMIME-tipe

Wat 'n MIME-tipe eintlik is

'n MIME-tipe, ook 'n mediatipe genoem, is 'n kort etiket wat sagteware vertel watter soort data 'n lêer of boodskapliggaam bevat. Dit is in e-pos gebore (die naam staan vir Multipurpose Internet Mail Extensions), maar vandag duik dit oral op die web op. Die formaat is altyd tipe/subtipe: 'n breë kategorie, 'n skuinsstreep, en 'n spesifieke formaat. So text/html beteken "teks, in HTML-vorm", image/png beteken "'n beeld, in PNG-vorm", en application/json beteken "toepassingsdata, geënkodeer as JSON".

Die topvlak-tipe kom van 'n vaste stel wat deur IANA, die amptelike register, onderhou word: text, image, audio, video, application, font, model, multipart, en 'n paar nuwer soos haptics. Die subtipe is die spesifieke formaat. Verskaffers kan hul eie byvoeg met 'n vnd.-voorvoegsel (byvoorbeeld application/vnd.ms-excel), en eksperimentele tipes het histories 'n x--voorvoegsel gebruik, alhoewel daardie konvensie nou afgekeur word.

Abstrakte gloeiende lêerformaat-ikone gesorteer in geëtiketteerde kategorietegels op 'n donker indigo agtergrond
Elke lêerformaat karteer na 'n tipe/subtipe-etiket.

Waar MIME-tipes saak maak

Die enkele belangrikste plek waar 'n MIME-tipe verskyn, is die HTTP Content-Type-antwoordkop. Wanneer 'n bediener 'n bladsy, 'n beeld of 'n API-loonvrag stuur, vertel hierdie kop die blaaier hoe om die grepe te interpreteer. As die kop text/html sê, gee die blaaier opmaak weer; as dit application/json sê, kan 'n fetch()-oproep dit ontleed; as dit application/pdf sê, maak die ingeboude kyker oop. Dieselfde kop reis ook op die versoekkant: wanneer jy 'n vorm of API-liggaam POST, vertel Content-Type die bediener hoe om te lees wat jy gestuur het.

Buiten HTTP dryf MIME-tipes verskeie ander stelsels aan. E-posprogramme gebruik hulle om te besluit of 'n aanhangsel 'n beeld is om te voorskou of 'n binêre lêer om te stoor. Lêeroplaai-hanteerders inspekteer die verklaarde tipe om lêers te aanvaar of te verwerp. En die bedryfstelsel of blaaier gebruik die tipe, nie net die lêeruitbreiding nie, om 'n verstektoepassing te kies. Dieselfde idee onderlê hoe bedieners resultate en foute rapporteer langs HTTP-statuskodes — 'n 200-antwoord met die verkeerde tipe kan net so stukkend wees as 'n 404.

Dié wat jy elke dag sal gebruik

'n Handjievol tipes dek die oorgrote meerderheid van werklike verkeer:

  • text/html — webbladsye (uitbreiding .html)
  • text/css — stylblaaie (.css)
  • text/javascript — die aanbevole tipe vir JavaScript (.js, .mjs)
  • application/json — die een amptelike JSON-tipe, gedefinieer in RFC 8259 (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — algemene beeldformate
  • application/pdf — PDF-dokumente (.pdf)
  • application/octet-stream — die opvangkategorie vir onbekende of arbitrêre binêre data
  • text/plain — die verstek vir gewone teks sonder 'n ryker tipe

JSON verdien 'n opmerking omdat dit mense laat struikel. Die enigste korrekte tipe is application/json. Ouer kode het soms text/json, text/plain of application/x-javascript gebruik, maar dié is verouderd en sommige kliënte sal weier om hulle te ontleed. Daar is ook geen karakterstel-parameter vir JSON nie — die spesifikasie vereis UTF-8, so om application/json; charset=utf-8 te skryf is oorbodig, alhoewel onskadelik. Vir 'n vollediger tabel van formate en uitbreidings, sien ons verwysingstabelle.

'n Gloeiende datapakkie geëtiketteer met 'n abstrakte tipe-kentekan wat oor 'n netwerkverbinding vloei
Die Content-Type reis saam met die loonvrag oor HTTP.

Waarom 'n verkeerde Content-Type dinge breek

Blaaiers en kliënte vertrou die verklaarde tipe, so om dit verkeerd te kry het konkrete gevolge. Stuur 'n JSON API-antwoord as text/html en die blaaier mag probeer om dit weer te gee, of 'n streng kliënt kan 'n ontledingsfout gooi voordat jou kode ooit loop. Stuur 'n CSS- of JavaScript-lêer met die verkeerde tipe, en 'n sekuriteitskenmerk genaamd X-Content-Type-Options: nosniff sal die blaaier laat weier om dit toe te pas, wat stilweg jou bladsystylering of skrifte breek.

Aflaaie is die ander klassieke mislukking. As jy wil hê 'n lêer moet aflaai eerder as vertoon word, maak die tipe saam met die Content-Disposition-kop saak. 'n PDF wat as application/octet-stream gestuur word, laai as 'n generiese lêer af in plaas daarvan om in die kyker oop te maak; 'n beeld wat as text/plain gestuur word, verskyn as onsinkarakters. Aan die oplaaikant kan 'n verkeerd geëtiketteerde lêer 'n naïewe uitbreidingskontrole verbygaan, en dis waarom robuuste validators die werklike grepe inspekteer (die "towergetal") eerder as om die kliënt-verskafde tipe te vertrou.

Histories het blaaiers probeer raai, of "snuif", na die werklike tipe wanneer die kop verkeerd gelyk het. Daardie gedrag het sekuriteitsgate veroorsaak, so moderne beste praktyk is om altyd 'n akkurate Content-Type te stuur en snuifing met nosniff te deaktiveer. Kortom: stel die tipe doelbewus op elke antwoord in, en die meeste weergawe-, aflaai- en ontledingsfoute verdwyn.

Gereelde vrae

Wat is die verskil tussen 'n MIME-tipe en 'n mediatipe?

Hulle is dieselfde ding. "MIME-tipe" is die ouer naam uit e-pos, terwyl "mediatipe" die term is wat IANA en moderne HTTP-spesifikasies verkies. Albei verwys na die tipe/subtipe-etiket.

Wat is die korrekte MIME-tipe vir JSON?

Dit is application/json, gedefinieer in RFC 8259. Ouer alternatiewe soos text/json of application/x-javascript is verouderd en sommige kliënte sal hulle verwerp.

Wat beteken application/octet-stream?

Dit is die generiese tipe vir arbitrêre binêre data sonder 'n meer spesifieke etiket. Bedieners gebruik dit as 'n terugval vir onbekende lêertipes, wat gewoonlik 'n aflaai eerder as vertoon in die blaaier veroorsaak.

Waarom laai my CSS- of JavaScript-lêer nie?

Dikwels stuur die bediener dit met die verkeerde Content-Type. Met X-Content-Type-Options op nosniff gestel, weier die blaaier om CSS wat nie text/css is nie of skrifte wat nie 'n JavaScript-tipe is nie, toe te pas. Herstel die bedienerkonfigurasie sodat die regte tipe gestuur word.

Kan ek 'n karakterstel by 'n MIME-tipe voeg?

Ja, vir teksformate, deur 'n parameter soos text/html; charset=utf-8 te gebruik. Vir JSON is dit onnodig omdat die formaat volgens spesifikasie altyd UTF-8 is, alhoewel om dit by te voeg geen skade doen nie.

Bepaal die lêeruitbreiding die MIME-tipe?

Nie oor HTTP nie. Die bediener besluit watter Content-Type om te stuur, en die blaaier vertrou daardie kop. Die uitbreiding dien slegs as 'n wenk vir hulpmiddels en bedryfstelsels wanneer geen eksplisiete tipe verskaf word nie.