← Բոլոր գործիքները

MIME տեսակների տեղեկատու

Ինչ են MIME տեսակները, ինչպես է աշխատում type/subtype ձևաչափը, որտեղ է կարևոր Content-Type-ը HTTP-ում և էլփոստում, տարածված տեսակներ, և ինչու է սխալ տեսակը խափանում ամեն ինչ։
ԸնդլայնումMIME տեսակ

Ինչ է իրականում MIME տեսակը

MIME տեսակը, որը կոչվում է նաև մեդիա տեսակ, կարճ պիտակ է, որը ծրագրաշարին ասում է, թե ինչ տեսակի տվյալ է պարունակում ֆայլը կամ հաղորդագրության մարմինը։ Այն ծնվել է էլփոստում (անվանումը նշանակում է Multipurpose Internet Mail Extensions), բայց այսօր հանդիպում է ամենուր վեբում։ Ձևաչափը միշտ type/subtype է. լայն կատեգորիա, թեք գիծ և կոնկրետ ձևաչափ։ Այսպես, text/html-ը նշանակում է «տեքստ, HTML ձևով», image/png-ը՝ «պատկեր, PNG ձևով», իսկ application/json-ը՝ «հավելվածի տվյալ, կոդավորված JSON-ով»։

Ամենավերին մակարդակի type-ը գալիս է IANA-ի կողմից պահվող ֆիքսված ցանկից, պաշտոնական ռեեստրից. text, image, audio, video, application, font, model, multipart, և մի քանի ավելի նոր, ինչպիսին է haptics-ը։ Subtype-ը կոնկրետ ձևաչափն է։ Մատակարարները կարող են ավելացնել իրենցը vnd. նախածանցով (օրինակ՝ application/vnd.ms-excel), իսկ փորձարարական տեսակները պատմականորեն օգտագործում էին x- նախածանց, չնայած այդ պայմանավորվածությունն այժմ խորհուրդ չի տրվում։

Աբստրակտ փայլուն ֆայլային ձևաչափի պատկերակներ, դասավորված պիտակավորված կատեգորիայի սալիկների մեջ մուգ մուգ կապույտ ֆոնի վրա
Ամեն ֆայլային ձևաչափ համապատասխանում է type/subtype պիտակի։

Որտե՞ղ է կարևոր MIME տեսակը

Ամենակարևոր վայրը, որտեղ հայտնվում է MIME տեսակը, HTTP Content-Type պատասխանի վերնագիրն է։ Երբ սերվերն ուղարկում է էջ, պատկեր կամ API տվյալ, այս վերնագիրն ասում է բրաուզերին, թե ինչպես մեկնաբանել բայթերը։ Եթե վերնագիրն ասում է text/html, բրաուզերը մատուցում է մարքափը; եթե ասում է application/json, fetch() կանչը կարող է վերծանել այն; եթե ասում է application/pdf, բացվում է ներկառուցված դիտիչը։ Նույն վերնագիրը շարժվում է նաև հարցման կողմում. երբ POST եք անում ձև կամ API տվյալներ, Content-Type-ը ասում է սերվերին, թե ինչպես կարդալ, ինչ ուղարկել եք։

HTTP-ից բացի, MIME տեսակները վարում են մի քանի այլ համակարգեր։ Էլփոստի հաճախորդներն օգտագործում են դրանք՝ որոշելու, թե կցվածքը դիտման ենթակա պատկեր է, թե պահպանման ենթակա երկուական ֆայլ։ Ֆայլերի վերբեռնման մշակիչները ստուգում են հայտարարված տեսակը՝ ֆայլերն ընդունելու կամ մերժելու համար։ Իսկ օպերացիոն համակարգը կամ բրաուզերը օգտագործում է տեսակը, ոչ միայն ֆայլի ընդլայնումը, լռելյայն հավելված ընտրելու համար։ Նույն գաղափարն է ընկած սերվերների կողմից արդյունքների ու սխալների հաղորդման հիմքում՝ HTTP վիճակի կոդերի հետ մեկտեղ. 200 պատասխանը սխալ տեսակով կարող է լինել նույնքան խափանված, որքան 404-ը։

Դրանք, որոնք կօգտագործեք ամեն օր

Մի քանի տեսակ ընդգրկում է իրական երթևեկության մեծ մասը.

  • text/html — վեբ էջեր (ընդլայնում .html)
  • text/css — ոճաթերթեր (.css)
  • text/javascript — JavaScript-ի համար առաջարկվող տեսակը (.js, .mjs)
  • application/json — JSON-ի միակ պաշտոնական տեսակը, սահմանված RFC 8259-ում (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — տարածված պատկերային ձևաչափեր
  • application/pdf — PDF փաստաթղթեր (.pdf)
  • application/octet-stream — ընդհանուր տեսակ անհայտ կամ կամայական երկուական տվյալների համար
  • text/plain — լռելյայն տեսակը սովորական տեքստի համար, որն ավելի հարուստ տեսակ չունի

JSON-ը արժանի է հատուկ նշման, քանի որ շատերին խաբում է։ Միակ ճիշտ տեսակը application/json-ն է։ Հին կոդը երբեմն օգտագործում էր text/json, text/plain, կամ application/x-javascript, բայց դրանք հնացած են, և որոշ հաճախորդներ կմերժեն դրանք վերծանել։ JSON-ի համար charset պարամետր չկա. սպեցիֆիկացիան պահանջում է UTF-8, ուստի application/json; charset=utf-8 գրելը ավելորդ է, թեև անվնաս։ Ձևաչափերի և ընդլայնումների ամբողջական աղյուսակի համար տես մեր տեղեկատու աղյուսակները։

Փայլուն տվյալների փաթեթ, պիտակավորված աբստրակտ տեսակի կրծքանշանով, հոսում է ցանցային կապով
Content-Type-ը շարժվում է տվյալների հետ HTTP-ով։

Ինչու՞ է սխալ Content-Type-ը ամեն ինչ խափանում

Բրաուզերներն ու հաճախորդները վստահում են հայտարարված տեսակին, ուստի սխալ լինելը կոնկրետ հետևանքներ ունի։ Մատուցեք JSON API պատասխանը որպես text/html, և բրաուզերը կարող է փորձել մատուցել այն, կամ խիստ հաճախորդը կարող է վերծանման սխալ նետել, նախքան ձեր կոդը երբևէ աշխատելը։ Մատուցեք CSS կամ JavaScript ֆայլ սխալ տեսակով, և անվտանգության հատկություն կոչված X-Content-Type-Options: nosniff-ը կստիպի բրաուզերին հրաժարվել դա կիրառելուց՝ լուռ խափանելով ձեր էջի ոճավորումը կամ սկրիպտները։

Ներբեռնումները մեկ այլ դասական խափանում են։ Եթե ցանկանում եք, որ ֆայլը ներբեռնվի, ոչ թե ցուցադրվի, տեսակը կարևոր է Content-Disposition վերնագրի հետ մեկտեղ։ application/octet-stream ուղարկված PDF-ը ներբեռնվում է որպես ընդհանուր ֆայլ՝ փոխանակ դիտիչում բացվելու; text/plain ուղարկված պատկերը հայտնվում է որպես անհասկանալի նիշեր։ Վերբեռնման կողմում սխալ պիտակավորված ֆայլը կարող է անցնել միամիտ ընդլայնման ստուգումը, ինչի պատճառով հուսալի վավերացուցիչները ստուգում են իրական բայթերը («մագիկ համարը»), ոչ թե վստահում հաճախորդի կողմից տրված տեսակին։

Պատմականորեն բրաուզերները փորձում էին կռահել, կամ «հոտառել», իրական տեսակը, երբ վերնագիրը սխալ էր թվում։ Այդ վարքագիծը անվտանգության անցքեր էր առաջացնում, ուստի ժամանակակից լավագույն պրակտիկան է միշտ ուղարկել ճշգրիտ Content-Type և անջատել հոտառումը nosniff-ով։ Կարճ ասած՝ միտումնավոր սահմանեք տեսակը ամեն պատասխանի վրա, և մատուցման, ներբեռնման ու վերծանման սխալների մեծ մասը կվերանա։

Հաճախակի տրվող հարցեր

Ի՞նչ տարբերություն կա MIME տեսակի և մեդիա տեսակի միջև

Դրանք նույն բանն են։ «MIME տեսակ»-ը ավելի հին անվանում է էլփոստից, մինչդեռ «մեդիա տեսակ»-ը այն տերմինն է, որը նախընտրում են IANA-ն և ժամանակակից HTTP սպեցիֆիկացիաները։ Երկուսն էլ վերաբերում են type/subtype պիտակին։

Ո՞րն է JSON-ի ճիշտ MIME տեսակը

Դա application/json-ն է, սահմանված RFC 8259-ում։ Հին այլընտրանքները, ինչպիսիք են text/json կամ application/x-javascript, հնացած են, և որոշ հաճախորդներ կմերժեն դրանք։

Ի՞նչ է նշանակում application/octet-stream

Դա ընդհանուր տեսակ է կամայական երկուական տվյալների համար, առանց ավելի կոնկրետ պիտակի։ Սերվերներն օգտագործում են դա որպես պահուստային տարբերակ անհայտ ֆայլային տեսակների համար, ինչը սովորաբար հրահրում է ներբեռնում, ոչ թե բրաուզերում ցուցադրում։

Ինչու՞ չի բեռնվում իմ CSS կամ JavaScript ֆայլը

Հաճախ սերվերն ուղարկում է այն սխալ Content-Type-ով։ X-Content-Type-Options-ը nosniff-ի սահմանելիս բրաուզերը հրաժարվում է կիրառել CSS, որը text/css չէ, կամ սկրիպտներ, որոնք JavaScript տեսակ չեն։ Ուղղեք սերվերի կարգավորումը, որպեսզի ուղարկվի ճիշտ տեսակը։

Կարո՞ղ եմ charset ավելացնել MIME տեսակին

Այո, տեքստային ձևաչափերի համար, օգտագործելով պարամետր, ինչպիսին է text/html; charset=utf-8-ը։ JSON-ի համար դա ավելորդ է, քանի որ ձևաչափը միշտ UTF-8 է սպեցիֆիկացիայով, թեև ավելացնելը վնաս չի տալիս։

Ֆայլի ընդլայնումն է որոշում MIME տեսակը

Ոչ HTTP-ի միջոցով։ Սերվերն է որոշում, թե ինչ Content-Type ուղարկել, և բրաուզերը վստահում է այդ վերնագրին։ Ընդլայնումը գործում է միայն որպես ակնարկ գործիքների ու օպերացիոն համակարգերի համար, երբ բացահայտ տեսակ չի տրամադրվում։