Veb inkişafında Content-Type: bu nədir, MIME növləri və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-03-10 Oxuma vaxtı: 9 dəq

Content-Type — bu, müştəri və server arasında məlumatların hansı formatda ötürüldüyünü göstərən HTTP başlığıdır. Düzgün MIME növü olmadan brauzer cavabı düzgün emal edə bilməz: mətn faylı xam kod kimi göstərilir, şəkil isə açılmır. MDN Web Docs, 2025 məlumatlarına görə, Content-Type HTTP protokolunda istənilən növdən məlumatların düzgün ötürülməsi üçün məcburidir və alıcının mesajın gövdəsini necə şərh etdiyini müəyyən edir.

Başlıca

  • Content-Type — sorğu və ya cavabın gövdəsində ötürülən məlumatların MIME növünü təyin edən HTTP başlığıdır.
  • MIME növü əsas kateqoriya və alt növdən ibarətdir, onlar kəsik işarəsi ilə ayrılır — məsələn, text/html və ya application/json.
  • Charset parametri mətn MIME növləri üçün kodlaşdırmanı göstərir, veb üçün standart UTF-8-dir.
  • Content-Type olmadan brauzer MIME sniffing işə salır, bu da göstərmə səhvlərinə və təhlükəsizlik boşluqlarına səbəb olur.
  • X-Content-Type-Options: nosniff başlığı növü təxmin etməyi söndürür və veb tətbiqlərinin təhlükəsizliyini artırır.

Content-Type nədir?

Content-Type — bu, representation headers qrupundan olan, alıcıya mesajın gövdəsindəki məlumatların formatı barədə məlumat verən HTTP başlığıdır. Tərkibində gövdə (body) olan HTTP sorğu və cavabları üçün məcburidir və onsuz müştəri alınan baytları düzgün şərh edə bilməz. Brauzer və ya mobil tətbiq Content-Type əsasında parser seçir: text/html üçün HTML mühərrikini, image/png üçün PNG dekoderini, application/json üçün JSON parserini işə salır.

Content-Type dəyəri MIME növüdür — standartlaşdırılmış məlumat formatı identifikatorudur. MIME açılımı Multipurpose Internet Mail Extensions deməkdir, çünki bu standart əslində e-poçt əlavələri üçün yaradılmışdır. Lakin o, HTTP-nin əsasına çevrildi və bu gün hər yerdə istifadə olunur — veb səhifələrin ötürülməsindən REST API-də məlumat mübadiləsinə qədər. Hər bir MIME növü iki hissədən ibarətdir: əsas kateqoriya və dəqiqləşdirici alt növ, kəsik işarəsi ilə ayrılır.

Charset parametri mətn formatları üçün Content-Type-ı tamamlayır. Məsələn, Content-Type: text/html; charset=utf-8 o deməkdir ki, UTF-8 kodlaşdırmasında HTML sənədi ötürülür. IETF RFC 7231, bölmə 3.1.1.5-ə görə, Content-Type başlığı gövdəsi olan HTTP mesajları üçün məcburidir və onun olmaması application/octet-stream kimi şərh edilir və ya MIME sniffing-ə səbəb olur.

MIME növlərinin HTTP-də meydana gəlmə tarixi

1991-ci ildə buraxılmış HTTP/0.9 protokolu yalnız HTML səhifələri ötürürdü, buna görə məlumat növü standart olaraq təyin edilmişdi. RFC 1945 spesifikasiyasında HTTP/1.0-ın meydana gəlməsi ilə tərtibatçılar şəkilləri, stil vərəqlərini və skriptləri ötürmək zərurətini dərk etdilər. Onlar e-poçt protokolundan MIME standartını uyğunlaşdırdılar və Content-Type HTTP-nin ayrılmaz hissəsinə çevrildi. O vaxtdan bəri IANA reyestri yüzlərlə dəyərə qədər genişləndi — tanınmış text/html-dən müasir image/avif və application/manifest+json-a qədər.

Təhlükəsizlikdə Content-Type-ın rolu

Content-Type hücumlardan qorunmada kritik rol oynayır. Əgər server HTML faylını text/plain MIME növü ilə göndərirsə, brauzer JavaScript-i icra etməyəcək və DOM qurmayacaq — bu, XSS hücumlarının qarşısını alır. OWASP tərəfindən tövsiyə olunan X-Content-Type-Options: nosniff başlığı brauzerə məzmun əsasında MIME növünü təxmin etməyi tamamilə qadağan edir. PortSwigger Research məlumatlarına görə, MIME sniffing istifadə edən hücumlar xüsusilə Internet Explorer 6-9-da geniş yayılmışdı, burada brauzer Content-Type-ı nəzərdən qaçırır və növü faylın ilk baytlarına görə təyin edirdi.

MIME növünün strukturu

MIME növü type/subtype formatında göstərilir, burada type məlumatların ümumi kateqoriyası, subtype isə onun daxilindəki konkret formatdır. Məsələn, image/png dəyərində image kateqoriyası şəkli, png alt növü isə Portable Network Graphics formatını göstərir. Kateqoriyalar bir neçədir: text, image, audio, video, application, multipart və message. Qalan müxtəliflik yüzlərlə sayda olan alt növlər tərəfindən təmin edilir.

Əlavə parametrlər alt növdən sonra nöqtəli vergül vasitəsilə ötürülür. Ən geniş yayılmış parametr kodlaşdırmanı göstərmək üçün charset-dir. Content-Type: application/json; charset=utf-8 o deməkdir ki, UTF-8 kodlaşdırmasında JSON sənədi ötürülür. Formal olaraq application/json üçün charset lazım deyil, çünki JSON həmişə RFC 8259 spesifikasiyasına uyğun olaraq UTF-8-dədir, lakin açıq göstərmə köhnə HTTP müştəriləri ilə uyğunluğu yaxşılaşdırır.

KateqoriyaAlt növ nümunələriTəsvir
texthtml, plain, css, javascript, csvİnsan tərəfindən oxuna bilən mətn formatları
imagejpeg, png, gif, webp, svg+xml, avifRastr və vektor şəkillər
audiompeg, ogg, wav, mp4, webmAxın şəklində oxutma üçün audio formatları
videomp4, webm, ogg, x-msvideo, 3gppVideo formatlar və multimedia konteynerləri
applicationjson, xml, pdf, zip, octet-stream, protobufİkilik və strukturlaşdırılmış məlumatlar
multipartform-data, mixed, alternative, byterangesBir neçə hissədən ibarət mürəkkəb sənədlər

Standart və qeyri-standart MIME növləri

Standart MIME növləri IANA reyestrində qeydiyyatdan keçirilir və əsas kateqoriya prefiksinə malikdir. Qeyri-standart (vendor-specific) növlər x- prefiksindən və ya vnd.company.type formatından istifadə edir — məsələn, Google-dan KML formatı üçün application/vnd.google-earth.kml+xml. Brauzerlər qeyri-standart növləri tanımayabilər, buna görə məlum olmayan əlavələr üçün application/octet-stream istifadə olunur — brauzerin göstərməyə çalışmayıb fayl kimi yükləməyi təklif etdiyi universal ikilik axın.

Praktikada charset parametri

Charset parametri mətnin düzgün göstərilməsi üçün kritik əhəmiyyət daşıyır. Olmadan brauzer simvolları səhv şərh edə bilər, bu da mojibake (krakozyabrlara) səbəb olur. Veb üçün standart UTF-8-dir, lakin qərbi Avropa dilləri üçün ISO-8859-1 (Latin-1) və köhnə saytlarda kiril üçün windows-1251 də rast gəlinir. W3C tövsiyəsi — text/html və text/plain üçün həmişə charset=utf-8 göstərmək, application/json üçün charset tələb olunmur.

Content-Type-ın əsas növləri

Praktikada veb tərtibatçılar və mobil tərtibatçılar məhdud MIME növləri dəsti ilə işləyirlər. Bu növləri bilmək serverin düzgün konfiqurasiyası, HTTP müştərilərinin yazılması və statik faylların işlənməsi üçün zəruridir. text/html — Apache və Nginx serverləri tərəfindən HTML faylları üçün standart olaraq qaytarılan veb səhifələr üçün əsas növdür. application/xhtml+xml daha az istifadə olunur və yalnız XHTML sənədləri üçündür.

application/json REST API üçün standarta çevrildi. Serverlər JSON məlumatlarını bu MIME növü ilə qaytarır, müştərilər isə onu POST və PUT sorğularında göndərir. text/javascript (köhnəlmiş) və application/javascript JavaScript faylları üçün istifadə olunur. W3Techs Survey, 2025 məlumatlarına görə, JSON 2018-ci ildə XML-i qabaqlayaraq vebdə ən sürətli böyüyən məlumat formatıdır. SOAP xidmətləri üçün hələ də text/xml və ya application/soap+xml istifadə olunur.

Şəkillər üçün MIME növü fayl formatı ilə müəyyən edilir: JPEG üçün image/jpeg, PNG üçün image/png, GIF üçün image/gif, WebP üçün image/webp. image/svg+xml vektor qrafikası üçün istifadə olunur və daxili stilləri və skriptləri dəstəkləyir. video/mp4, audio/mpeg və application/pdf digər tez-tez rast gəlinən növlərdir. Veb şriftləri üçün font/woff2, font/woff və font/ttf istifadə olunur.

Fayl yükləmə zamanı Content-Type

HTML forması vasitəsilə fayllar göndərərkən multipart/form-data istifadə olunur — sorğunu bir neçə hissəyə bölən mürəkkəb MIME növü. Hər hissənin öz Content-Type və sahə adını və faylın orijinal adını göstərən Content-Disposition başlığı var. Server faylı brauzer tərəfindən müəyyən edilmiş faktiki MIME növü ilə alır və onu backend tərəfində yoxlaya bilər. application/octet-stream məlum olmayan növdən fayllar üçün tətbiq edilir — brauzer məzmunu göstərməyə çalışmır, onu diskdə saxlamağı təklif edir.

Content-Type-ın keşləməyə təsiri

MIME növü CDN və brauzer keşləmə siyasətinə təsir edir. Stabil URL-ləri olan şəkillər adətən uzun müddətə (bir il və daha çox) keşlənir, HTML səhifələr isə dəqiqələr və ya saniyələr üçün. CDN serverləri Cloudflare və Akamai sıxışdırma alqoritmi seçmək üçün Content-Type-dan istifadə edir: text/* gzip və ya brotli ilə sıxışdırılır, image/* — yox, çünki şəkillər artıq sıxışdırılmışdır. Serverdə Content-Type-ın düzgün konfiqurasiyası səhifələrin və mobil tətbiqlərin yüklənmə performansına birbaşa təsir edir.

Server və müştəri Content-Type-ı necə istifadə edir

Server HTTP cavabında Content-Type başlığını tələb olunan faylın növünə və ya dinamik yaradılmış məzmuna əsasən təyin edir. Məşhur Nginx və Apache veb serverləri fayl genişlənməsini müvafiq Content-Type ilə əlaqələndirən daxili MIME növ cədvəllərinə malikdir. Məsələn, index.html faylı text/html, style.css isə text/css alır. Dinamik cavablar üçün tərtibatçı PHP, Python, Java və ya Kotlin tətbiq kodunda Content-Type-ı təyin edir.

Müştəri emal qurğusunu seçmək üçün Content-Type-dan istifadə edir. Server text/html qaytarırsa, brauzer HTML parserini işə salır və DOM ağacını qurur. image/png olarsa — PNG dekoderini işə salır. Content-Type yoxdursa və ya səhv göstərilirsə, müştəri MIME sniffing tətbiq edir — faylın əvvəlindəki imza (magic bytes) əsasında növü təxmin etməyə çalışır. JPEG FF D8 FF baytları ilə, PNG 89 50 4E 47 ilə, PDF isə 25 50 44 46 ilə başlayır. Bu proses potensial təhlükəlidir və X-Content-Type-Options: nosniff başlığı ilə söndürülür.

Mobil tətbiqlərdə Content-Type HTTP müştəriləri tərəfindən emal olunur. Android-də OkHttp cavabdan Content-Type başlığını avtomatik təhlil edir və onu Response.header("Content-Type") metodu vasitəsilə təmin edir. iOS müştərisi URLSession eyni şeyi URLResponse.mimeType xassəsi vasitəsilə edir. Hər iki platformada Content-Type parser seçimi üçün istifadə olunur: JSON — Android-də Moshi və ya Gson vasitəsilə, iOS-da Codable ilə; şəkillər — Glide, Coil və ya SDWebImage vasitəsilə.

Accept və Content-Type vasitəsilə Content Negotiation

Content negotiation (məzmunun razılaşdırılması) — HTTP mexanizmidir, burada müştəri Accept başlığı vasitəsilə istənilən cavab formatını göstərir, server isə uyğun formatı seçir və onu müvafiq Content-Type ilə qaytarır. Məsələn, müştəri Accept: application/json göndərir, server Content-Type: application/json ilə cavab verir. Server tələb olunan formatı təmin edə bilmirsə, 406 Not Acceptable qaytarır. REST API-də bu mexanizm bir endpoint-ə JSON, XML və ya HTML-də məlumat qaytarmağa imkan verir.

Content-Type sorğu və cavablarda

Content-Type başlığı həm HTTP sorğularında (Request), həm də HTTP cavablarında (Response) istifadə olunur. Sorğularda o, sorğu gövdəsinin formatını göstərir, məsələn JSON-u POST vasitəsilə göndərərkən. Cavablarda — qaytarılan məlumatların formatını. Əsas fərq ondadır ki, sorğunun Content-Type-nı müştəri, cavabın Content-Type-nı isə server təyin edir. Sorğuda səhv Content-Type təyini serverin gövdəni təhlil edə bilməməsinə səbəb olur, 400 Bad Request və ya 415 Unsupported Media Type xətası qaytarılır.

HTTP sorğularında Content-Type POST, PUT və PATCH metodları üçün məcburidir, əgər sorğu gövdə (body) ehtiva edirsə. GET, HEAD və DELETE adətən gövdə istifadə etmir, buna görə Content-Type onlar üçün göstərilmir və ya nəzərdən qaçırılır. enctype="multipart/form-data" atributu olan HTML forması göndərərkən brauzer avtomatik olaraq Content-Type: multipart/form-data təyin edir və mürəkkəb sorğunun hissələrini ayıran unikal sərhəd sətri (boundary) əlavə edir. Hər hissə --boundary ilə ayrılır, sorğunun sonu isə --boundary-- ilə qeyd olunur.

HTTP cavablarında Content-Type server tərəfindən təyin edilir. Server Content-Type göstərməzsə, müştəri ya MIME sniffing işə salır, ya da cavabı application/octet-stream kimi emal edir. HTTP HEAD metodu gövdəni ötürmədən Content-Type daxil olmaqla cavab başlıqlarını almağa imkan verir. Bu, tam yükləmədən əvvəl resursun növünü yoxlamaq üçün faydalıdır. CDN serverləri məzmun transformasiyası zamanı Content-Type-ı dəyişə bilər — məsələn, şəkilləri WebP-ə çevirərkən.

kotlin
import okhttp3.*

fun checkContentType() {
    val client = OkHttpClient()
    val request = Request.Builder()
        .url("https://api.example.com/resource")
        .head()
        .build()

    client.newCall(request).execute().use { response ->
        val contentType = response.header("Content-Type")
        val mediaType = MediaType.parse(contentType)
        println("Növ: ${mediaType?.type}, Alt növ: ${mediaType?.subtype}")
    }
}

Mobil HTTP müştərilərində Content-Type

Mobil tərtibatda Content-Type başlığı HTTP müştəriləri tərəfindən avtomatik emal olunur. Android-də OkHttp-də Content-Type RequestBody vasitəsilə təyin edilir: val body = "{}".toRequestBody("application/json".toMediaType()). Retrofit Content-Type-ı annotasiyalar vasitəsilə idarə edir: JSON üçün @Body, multipart üçün @Part. iOS-da URLSession HTTPBody üçün Content-Type təyin edir, Alamofire isə bunu encoding parametri vasitəsilə edir: JSONEncoding.default və ya URLEncoding.default. Content-Type-ın əl ilə təyini xam soketlər və ya fərdi protokollarla işləyərkən tələb olunur.

Content-Type ilə işləyərkən səhvlər

Səhv Content-Type — veb xidmətlərin hazırlanması və inteqrasiyası zamanı ən geniş yayılmış problemlərdən biridir. Ən geniş yayılmış səhv serverin text/html qaytarmasıdır application/json əvəzinə. Müştəri JSON-u HTML sətri kimi alır, onu təhlil edə bilmir və istisna yaradır. Bu, veb freymvork standart olaraq HTML-ə konfiqurasiya edildikdə və tərtibatçı API endpointi üçün Content-Type-ı dəyişdirməyi unutduqda baş verir. PHP-də bu, header('Content-Type: application/json') olmaması, Spring Boot-da isə produces annotasiyasının olmaması ilə özünü göstərir.

Tezlik baxımından ikinci səhv səhv və ya çatışmayan charset-dir. Server text/html; charset=iso-8859-1 göndərir, brauzer isə UTF-8 gözləyirsə, kiril simvolları krakozyabr kimi göstərilir. Bu problem UTF-8-ə keçməmiş köhnə saytlar üçün xarakterikdir. JSON üçün belə səhv daha az rast gəlinir, çünki RFC 8259 əlavə razılaşdırma olmadan UTF-8 tələb edir. Həll — server konfiqurasiyasında mətn MIME növləri üçün həmişə açıq şəkildə charset=utf-8 göstərmək.

Üçüncü problem — Content-Type-ın real məzmuna uyğun gəlməməsi. Server Content-Type: image/png göndərir, lakin cavabın gövdəsində WebP şəkli var, brauzer onu dekod edə bilməz. CDN serverləri bəzən formatı dəyişdirərək şəkilləri sıxışdırır, lakin Content-Type başlığını yeniləmir. Content-Type-ın faktiki məzmuna uyğunluğunun yoxlanılması API testinin və mobil tətbiqlərin inteqrasiya testinin məcburi mərhələsidir.

Content-Type səhvlərinin diaqnostikası və düzəldilməsi

Debug üçün brauzerin tərtibatçı alətlərindən (Network sekmesi), cavab başlıqlarını yoxlamaq üçün -I bayrağı ilə curl-dan və ya Charles Proxy və Wireshark kimi trafik sniffersindən istifadə edin. Nginx include mime.types direktivi ilə, Apache isə AddType və AddDefaultCharset vasitəsilə konfiqurasiya olunur. Statik fayllar üçün həmişə fayl genişlənməsinin onun MIME növünə uyğun olduğunu yoxlayın. Dinamik cavablar üçün bütün proqramlaşdırma dillərində məlumat çıxarmazdan əvvəl açıq şəkildə Content-Type təyin edin — bu, problemlərin böyük əksəriyyətinin qarşısını alır.

Tez-tez verilən suallar

HTTP cavabında Content-Type göstərilməsə nə olar?

Content-Type olmadan brauzer MIME sniffing işə salır — məlumat növünü avtomatik təyin etmək üçün cavabın ilk baytlarının təhlili. Bu, məzmunun səhv emalına və təhlükəsizlik boşluqlarına səbəb ola bilər. X-Content-Type-Options: nosniff başlığı olan müasir brauzerlər təxmin etməyi tamamilə bloklayır.

Content-Type HTTP-də Accept-dən nə ilə fərqlənir?

Content-Type cari mesajda ötürülən məlumatların formatını (sorğu və ya cavab gövdəsini) göstərir. Accept — serverə müştərinin hansı cavab formatına üstünlük verdiyini bildirən sorğu başlığıdır. Content-Type məlumat göndərən, Accept isə alan tərəfindən təyin edilir və onlar məzmunun razılaşdırılması mexanizmində iştirak edirlər.

JSON üçün düzgün Content-Type hansıdır?

JSON üçün rəsmi MIME növü application/json-dur RFC 8259 spesifikasiyasına uyğun olaraq. Əvvəllər text/x-json istifadə olunurdu, lakin bu növ köhnəlmişdir. application/json üçün charset parametri tələb olunmur, çünki JSON spesifikasiyaya görə həmişə UTF-8, UTF-16 və ya UTF-32 kodlaşdırmasında bayt sırasının avtomatik təyini (BOM) ilə ötürülür.

Niyə server application/json əvəzinə text/html qaytarır?

Bu, veb freymvork API endpointləri üçün standart Content-Type-ı dəyişdirmədikdə baş verir. PHP-də header('Content-Type: application/json') çağırılması ilə, Spring Boot-da @GetMapping(produces = "application/json") annotasiyası ilə, Express.js-də isə res.set('Content-Type', 'application/json') metodu ilə düzəldilir.

Content-Type: application/octet-stream nə deməkdir?

application/octet-stream — formatı məlum olmayan ikilik məlumatlar üçün universal MIME növdür. Brauzer belə faylı pəncərədə göstərməyə çalışmır, onu diskdə saxlamağı təklif edir. Server ötürülən məzmunun dəqiq növünü müəyyən edə bilmədikdə fayl yükləmə, e-poçt əlavələri və axın məlumatları üçün istifadə olunur.

Nəticə

  • Content-Type — gövdəsi olan mesajlar üçün məcburi olan, ötürülən məlumatların MIME növünü təyin edən HTTP başlığıdır.
  • MIME növü kateqoriyadan (text, image, application) və alt növdən (html, json, png) ibarətdir, kəsik işarəsi ilə ayrılır — məsələn, text/html və ya application/json.
  • Charset parametri mətn növləri üçün kodlaşdırmanı göstərir; veb üçün standart UTF-8-dir, açıq göstərmə simvol göstərmə problemlərinin qarşısını alır.
  • Content-Type həm sorğularda (POST, PUT), həm də cavablarda istifadə olunur, parser seçiminə və müştəri tərəfindən məlumatın emalına təsir edir.
  • Content-Type səhvləri səhv göstərməyə, parser problemlərinə, 400/415 xətalarına və MIME sniffing zəifliklərinə səbəb olur.
  • X-Content-Type-Options: nosniff başlığı brauzer tərəfindən MIME növünün təxmin edilməsini söndürür və OWASP tərəfindən bütün veb tətbiqlər üçün tövsiyə olunur.
  • API testlərində Content-Type yoxlanılması məcburidir — hər endpoint cavabın real məzmununa uyğun gözlənilən MIME növünü qaytarmalıdır.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun