← Barcha vositalar

MIME Turlari Ma'lumotnomasi

MIME turlari nima, type/subtype formati qanday ishlashi, Content-Type HTTP va emailda qayerda muhimligi, keng tarqalgan turlar va noto'g'ri tur nega muammo tug'dirishi.
KengaytmaMIME turi

MIME turi aslida nima

MIME turi, shuningdek media turi deb ham ataladi, dasturiy ta'minotga fayl yoki xabar tanasi qanday ma'lumot turini o'z ichiga olganini aytib beruvchi qisqa yorliqdir. U elektron pochtada tug'ilgan (nomi Multipurpose Internet Mail Extensions dan olingan), ammo bugungi kunda internetning har joyida uchraydi. Format har doim type/subtype ko'rinishida: keng toifa, qiya chiziq va aniq format. Shunday qilib text/html "matn, HTML shaklida", image/png "rasm, PNG shaklida", application/json esa "ilova ma'lumoti, JSON shaklida kodlangan" degan ma'noni bildiradi.

Yuqori darajadagi type IANA rasmiy reyestri tomonidan yuritiladigan belgilangan to'plamdan olinadi: text, image, audio, video, application, font, model, multipart va haptics kabi bir nechta yangilari. Subtype esa aniq formatdir. Ishlab chiqaruvchilar vnd. prefiksi bilan o'zlarinikini qo'shishlari mumkin (masalan application/vnd.ms-excel), tajriba turlari esa tarixan x- prefiksidan foydalangan, ammo bu konventsiya hozir tavsiya etilmaydi.

Qorong'i indigo fonda toifalar bo'yicha nomlangan katakchalarga saralangan mavhum porlab turgan fayl format belgilari
Har bir fayl formati type/subtype yorlig'iga mos keladi.

MIME turlari qayerda muhim

MIME turi paydo bo'ladigan eng muhim joy — HTTP Content-Type javob sarlavhasidir. Server sahifa, rasm yoki API yukini yuborganda, bu sarlavha brauzerga baytlarni qanday talqin qilishni aytadi. Agar sarlavha text/html deb yozilsa, brauzer razmetkani render qiladi; agar application/json bo'lsa, fetch() chaqiruvi uni tahlil qila oladi; agar application/pdf bo'lsa, o'rnatilgan ko'ruvchi ochiladi. Bir xil sarlavha so'rov tomonida ham yuriladi: forma yoki API tanasini POST qilganingizda, Content-Type serverga yuborilgan narsani qanday o'qishni aytadi.

HTTPdan tashqari, MIME turlari bir nechta boshqa tizimlarni ham boshqaradi. Elektron pochta mijozlari ilova rasm sifatida oldindan ko'rsatilishi yoki ikkilik fayl sifatida saqlanishi kerakligini hal qilish uchun ulardan foydalanadi. Fayl yuklash ishlov beruvchilari fayllarni qabul qilish yoki rad etish uchun e'lon qilingan turni tekshiradi. Operatsion tizim yoki brauzer standart ilovani tanlash uchun faqat fayl kengaytmasini emas, balki turni ham ishlatadi. Xuddi shu g'oya serverlar HTTP holat kodlari bilan bir qatorda natijalar va xatolarni qanday xabar qilishi asosida ham yotadi — noto'g'ri tur bilan yuborilgan 200 javob ham 404 kabi buzuq bo'lishi mumkin.

Har kuni ishlatadiganlaringiz

Bir nechta tur haqiqiy trafikning katta qismini qamrab oladi:

  • text/html — veb-sahifalar (kengaytma .html)
  • text/css — uslub jadvallari (.css)
  • text/javascript — JavaScript uchun tavsiya etilgan tur (.js, .mjs)
  • application/json — RFC 8259 da belgilangan yagona rasmiy JSON turi (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — keng tarqalgan rasm formatlari
  • application/pdf — PDF hujjatlari (.pdf)
  • application/octet-stream — noma'lum yoki ixtiyoriy ikkilik ma'lumotlar uchun umumiy tur
  • text/plain — boyroq turi bo'lmagan oddiy matn uchun standart

JSON alohida eslatishga loyiq, chunki u odamlarni chalg'itadi. Yagona to'g'ri tur — application/json. Eski kodlar ba'zan text/json, text/plain yoki application/x-javascript dan foydalangan, ammo ular eskirgan va ba'zi mijozlar ularni tahlil qilishdan bosh tortadi. JSON uchun charset parametri ham yo'q — spetsifikatsiya UTF-8 ni talab qiladi, shuning uchun application/json; charset=utf-8 deb yozish ortiqcha, garchi zararsiz bo'lsa ham. Formatlar va kengaytmalarning to'liqroq jadvali uchun ma'lumotnoma jadvallarimizga qarang.

Tarmoq ulanishi bo'ylab oqib o'tuvchi mavhum tur belgisi bilan nishonlangan porlab turgan ma'lumot paketi
Content-Type yuk bilan birga HTTP orqali yuriladi.

Nima uchun noto'g'ri Content-Type narsalarni buzadi

Brauzerlar va mijozlar e'lon qilingan turga ishonadi, shuning uchun uni noto'g'ri belgilash aniq oqibatlarga olib keladi. JSON API javobini text/html sifatida yuboring — brauzer uni render qilishga urinishi mumkin yoki qattiq mijoz kodingiz hali ishlamasdan turib tahlil xatosini tashlab yuborishi mumkin. CSS yoki JavaScript faylini noto'g'ri tur bilan yuboring — X-Content-Type-Options: nosniff deb ataladigan xavfsizlik funksiyasi brauzerga uni qo'llashdan bosh tortdiradi, bu esa sahifa uslubi yoki skriptlaringizni jimgina buzadi.

Yuklab olishlar boshqa klassik nosozlik holatidir. Agar faylning ko'rsatilishi o'rniga yuklab olinishini xohlasangiz, tur Content-Disposition sarlavhasi bilan birga muhim ahamiyatga ega. application/octet-stream sifatida yuborilgan PDF ko'ruvchida ochilish o'rniga umumiy fayl sifatida yuklab olinadi; text/plain sifatida yuborilgan rasm tushunarsiz belgilar ko'rinishida chiqadi. Yuklash tomonida esa noto'g'ri belgilangan fayl oddiy kengaytma tekshiruvidan o'tib ketishi mumkin, shuning uchun ishonchli tekshiruvchilar mijoz taqdim etgan turga ishonish o'rniga haqiqiy baytlarni ("sehrli raqam"ni) tekshiradi.

Tarixan, brauzerlar sarlavha noto'g'ri ko'ringanda haqiqiy turni taxmin qilishga, ya'ni "hidlashga" urinishgan. Bu xatti-harakat xavfsizlik teshiklarini keltirib chiqargan, shuning uchun zamonaviy eng yaxshi amaliyot har doim aniq Content-Type yuborish va nosniff bilan hidlashni o'chirishdir. Qisqa qilib aytganda: turni har bir javobda ataylab belgilang, va render qilish, yuklab olish hamda tahlil qilishdagi ko'pchilik xatolar yo'qoladi.

Tez-tez so'raladigan savollar

MIME turi va media turi orasidagi farq nima?

Ular bir xil narsa. "MIME turi" elektron pochtadan kelgan eski nom, "media turi" esa IANA va zamonaviy HTTP spetsifikatsiyalari afzal ko'radigan atama. Ikkalasi ham type/subtype yorlig'iga ishora qiladi.

JSON uchun to'g'ri MIME turi qaysi?

Bu application/json bo'lib, RFC 8259 da belgilangan. text/json yoki application/x-javascript kabi eski alternativalar eskirgan va ba'zi mijozlar ularni rad etadi.

application/octet-stream nimani anglatadi?

Bu aniqroq yorlig'i bo'lmagan ixtiyoriy ikkilik ma'lumotlar uchun umumiy tur. Serverlar undan noma'lum fayl turlari uchun zaxira sifatida foydalanadi, bu esa odatda brauzerda ko'rsatish o'rniga yuklab olishni ishga tushiradi.

Nega mening CSS yoki JavaScript faylim yuklanmayapti?

Ko'pincha server uni noto'g'ri Content-Type bilan yuboradi. X-Content-Type-Options nosniff ga o'rnatilganda, brauzer text/css bo'lmagan CSS ni yoki JavaScript turi bo'lmagan skriptlarni qo'llashdan bosh tortadi. To'g'ri tur yuborilishi uchun server konfiguratsiyasini tuzating.

MIME turiga charset qo'sha olamanmi?

Ha, matn formatlari uchun text/html; charset=utf-8 kabi parametr yordamida. JSON uchun bu keraksiz, chunki format spetsifikatsiya bo'yicha har doim UTF-8, garchi uni qo'shish zarar keltirmasa ham.

Fayl kengaytmasi MIME turini belgilaydimi?

HTTP orqali emas. Qaysi Content-Type yuborishni server hal qiladi, brauzer esa bu sarlavhaga ishonadi. Kengaytma faqat aniq tur ko'rsatilmagan hollarda vositalar va operatsion tizimlar uchun maslahat vazifasini bajaradi.