Bosh sahifa Wiki MIME

MIME

MIME — internet xabar va HTTP contentida ma’lumot turini, encodingini hamda bir nechta qismdan tashkil topgan body tuzilmasini ifodalash uchun yaratilgan standartlar oilasi. To‘liq nomi Multipurpose Internet Mail Extensions. MIME dastlab email imkoniyatlarini oddiy ASCII matndan tashqariga kengaytirgan.

Bugungi kunda MIME type yoki media type web server, browser, email, API va file upload tizimlarida content qanday talqin qilinishini ko‘rsatadi.

Media type

Media type quyidagi ko‘rinishga ega:

type/subtype

Misollar:

text/html
application/json
image/png
audio/mpeg

Asosiy type contentning katta guruhini, subtype esa aniq formatni bildiradi.

Asosiy turlar

Keng tarqalgan top-level turlar:

  • text;
  • image;
  • audio;
  • video;
  • application;
  • multipart;
  • message;
  • font;
  • modelga oid boshqa registered turlar.

application/octet-stream umumiy noma’lum binary data uchun ishlatiladi.

Content-Type

HTTP va emailda Content-Type header body formatini ko‘rsatadi:

Content-Type: application/json

Text type uchun charset parameteri berilishi mumkin:

Content-Type: text/html; charset=utf-8

Receiver body’ni shu ma’lumot asosida parse qiladi.

Charset

Charset byte’larni characterlarga qanday aylantirishni bildiradi.

UTF-8 keng tarqalgan:

text/plain; charset=utf-8

Header va actual encoding mos bo‘lmasa matn buzilishi yoki security filter va browser talqini farqlanishi mumkin.

Parameter

Media type semicolon bilan qo‘shimcha parameterlarga ega:

multipart/form-data; boundary=abc123

Parameter nomi case-insensitive bo‘lishi mumkin, qiymat esa format qoidalariga bo‘ysunadi.

Boundary multipart body qismlarini ajratadi.

Multipart

multipart/* bitta body ichida bir nechta mustaqil qism saqlaydi.

Har qism o‘z header va body’siga ega.

Keng turlar:

  • multipart/mixed;
  • multipart/alternative;
  • multipart/form-data;
  • multipart/related.

Boundary body ichida tasodifan uchramaydigan qiymat bo‘lishi kerak.

Multipart/form-data

HTML form va file uploadda ishlatiladi.

Har field alohida part:

Content-Disposition: form-data; name="title"

File part filename va Content-Typega ega bo‘lishi mumkin.

Client qo‘lda boundary’siz Content-Type qo‘ymasligi kerak; browser FormData bilan uni o‘zi yaratadi.

Multipart/alternative

Email bir contentning bir nechta variantini beradi:

  • plain text;
  • HTML.

Email client o‘zi qo‘llab-quvvatlagan yoki afzal variantni tanlaydi.

Variantlar bir xil mazmunni ifodalashi kerak.

Content-Disposition

Content qanday ko‘rsatilishini bildiradi.

HTTP file response’da:

Content-Disposition: attachment; filename="report.csv"

attachment downloadni taklif qiladi.

inline browser ichida ko‘rsatishga yaqin behavior beradi.

Filename sanitization va encoding muhim.

Content-Transfer-Encoding

Email tarixida binary data’ni text transport orqali uzatish uchun:

  • base64;
  • quoted-printable;
  • 7bit;
  • 8bit;
  • binary

kabi encodinglar ishlatiladi.

Bu encryption emas.

Base64 faqat byte representationni textga aylantiradi.

Base64

Binary attachment Base64 bilan kodlanganda hajm taxminan oshadi.

Receiver uni decode qiladi.

Noto‘g‘ri padding yoki katta encoded content parser resource’iga ta’sir qilishi mumkin.

Quoted-printable

Asosan text uchun ishlatiladi.

Ko‘p ASCII belgilar o‘z holicha qoladi, maxsus byte’lar = bilan encoded yoziladi.

Line wrapping va soft line break qoidalari mavjud.

File extension va MIME

.png extension file format haqida signal beradi, lekin ishonchli tekshiruv emas.

Attacker executable faylni .jpg deb nomlashi mumkin.

Uploadda:

birgalikda tekshiriladi.

MIME sniffing

Browser server noto‘g‘ri yoki yo‘q Content-Type yuborsa contentni byte’lardan taxmin qilishi mumkin.

Bu MIME sniffing.

Security uchun server aniq type beradi va zarur holatda:

X-Content-Type-Options: nosniff

headeridan foydalanadi.

Vendor va personal subtype

Registered subtype’lardan tashqari vendor-specific media type’lar uchraydi:

application/vnd.example.resource+json

+json suffix content JSON sintaksisiga asoslanganini ko‘rsatishi mumkin.

Version media type yoki parameter orqali boshqarilishi ehtimoli bor.

HTTP Accept

Client qaysi media type’larni qabul qilishini Accept headerda ko‘rsatadi:

Accept: application/json

Server content negotiation orqali mos representation tanlaydi.

Mos format bo‘lmasa 406 Not Acceptable qaytarilishi mumkin.

Email attachment

Email attachment MIME part sifatida uzatiladi.

Headerlar:

  • Content-Type;
  • Content-Disposition;
  • Content-Transfer-Encoding;
  • Content-ID;
  • filenamega oid parameter

ni o‘z ichiga olishi mumkin.

Email scanner barcha nested multipart va archive qismlarini tekshiradi.

Security

MIME handling xavflari:

Type faqat headerga qarab ishonchli deb qabul qilinmaydi.

Content negotiation

HTTP server bir resource’ning JSON, XML, HTML yoki boshqa representationini taklif qilishi mumkin. Client Accept headerda afzal media turlar va quality qiymatlarini beradi. Server mos variantni tanlab, Content-Type bilan javob qaytaradi. Cache response variantlarini ajratish uchun Vary: Acceptga o‘xshash header ishlatishi mumkin.

Multipart parsing

Multipart parser boundary, header va har part hajmini cheklaydi. Nested multipart chuqurligi, filename va content-disposition qiymati tekshiriladi. Temporary file xavfsiz directoryda saqlanadi va request tugagach tozalanadi.

MIME database

Operatsion tizim va web server extensiondan media type topish uchun mapping jadvalidan foydalanadi. Mapping yangilanmasa yangi format application/octet-stream bo‘lib qaytishi mumkin.

Default tur

Server formatni aniqlay olmasa application/octet-stream qaytarishi mumkin. Browser bunday contentni odatda umumiy binary sifatida ko‘radi.

Bog‘liq tushunchalar

Multipurpose Internet Mail Extensions, Media type, Content-Type, Multipart, Content-Disposition, Base64, Charset, MIME sniffing, HTTP header, Email attachment