← Tüm araçlar

MIME Türleri Referansı

MIME türleri nedir, tür/alt tür biçimi nasıl çalışır, Content-Type HTTP ve e-postada nerede önemlidir, yaygın türler ve yanlış türün neden sorun yarattığı.
UzantıMIME türü

MIME türü gerçekte nedir

Medya türü olarak da adlandırılan MIME türü, bir dosyanın veya ileti gövdesinin ne tür veriler içerdiğini yazılıma bildiren kısa bir etikettir. E-postada doğdu (adı Multipurpose Internet Mail Extensions — Çok Amaçlı İnternet Posta Uzantıları'nın kısaltmasıdır) ancak bugün web'in her yerinde karşımıza çıkmaktadır. Biçim her zaman tür/altür şeklindedir: geniş bir kategori, eğik çizgi ve belirli bir biçim. Yani text/html "HTML biçimindeki metin", image/png "PNG biçimindeki bir görüntü" ve application/json "JSON olarak kodlanmış uygulama verisi" anlamına gelir.

Üst düzey tür, resmi kayıt kuruluşu IANA tarafından yönetilen sabit bir kümeden gelir: text, image, audio, video, application, font, model, multipart ve haptics gibi birkaç yeni eklenti. Altür ise belirli biçimdir. Satıcılar vnd. ön ekiyle kendi türlerini ekleyebilir (örneğin application/vnd.ms-excel); deneysel türler tarihsel olarak x- ön ekini kullanmıştır, ancak bu yaklaşım artık önerilmemektedir.

Koyu indigo arka plan üzerinde etiketli kategori kutucuklarına sıralanmış soyut parlak dosya biçimi simgeleri
Her dosya biçimi bir tür/altür etiketiyle eşleşir.

MIME türlerinin önem taşıdığı yerler

Bir MIME türünün göründüğü en önemli yer, HTTP Content-Type yanıt başlığıdır. Bir sunucu sayfa, görüntü veya API yükü gönderdiğinde bu başlık tarayıcıya baytları nasıl yorumlaması gerektiğini söyler. Başlık text/html diyorsa tarayıcı biçimlendirmeyi işler; application/json diyorsa bir fetch() çağrısı onu ayrıştırabilir; application/pdf diyorsa yerleşik görüntüleyici açılır. Aynı başlık istek tarafında da yer alır: bir form veya API gövdesi POST gönderdiğinizde, Content-Type sunucuya gönderdiğinizi nasıl okuması gerektiğini söyler.

HTTP'nin ötesinde MIME türleri başka sistemleri de yönlendirir. E-posta istemcileri, ekin önizlenecek bir görüntü mü yoksa kaydedilecek bir ikili dosya mı olduğuna karar vermek için bunları kullanır. Dosya yükleme işleyicileri dosyaları kabul etmek veya reddetmek için beyan edilen türü inceler. İşletim sistemi veya tarayıcı ise yalnızca dosya uzantısına değil, türe göre varsayılan uygulamayı seçer. Aynı fikir, sunucuların sonuçları ve hataları HTTP durum kodları ile birlikte nasıl raporladığının da temelini oluşturur — yanlış türe sahip 200 yanıtı, 404 kadar bozuk olabilir.

Her gün kullanacağınız türler

Gerçek trafiğin büyük çoğunluğunu birkaç tür karşılar:

  • text/html — web sayfaları (.html uzantısı)
  • text/css — stil sayfaları (.css)
  • text/javascript — JavaScript için önerilen tür (.js, .mjs)
  • application/json — RFC 8259'da tanımlanan tek resmi JSON türü (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — yaygın görüntü biçimleri
  • application/pdf — PDF belgeleri (.pdf)
  • application/octet-stream — bilinmeyen veya rastgele ikili veriler için genel kapsayıcı
  • text/plain — daha zengin bir türü bulunmayan düz metin için varsayılan

JSON ayrı bir not hak eder çünkü sık hataya yol açar. Tek doğru tür application/json'dur. Eski kodlar bazen text/json, text/plain veya application/x-javascript kullanırdı; ancak bunlar artık geçerliliğini yitirmiştir ve bazı istemciler bunları ayrıştırmayı reddeder. JSON için bir karakter kümesi parametresi de yoktur — spesifikasyon UTF-8'i zorunlu kılar, bu nedenle application/json; charset=utf-8 yazmak gereksiz olsa da zararsızdır. Biçimlerin ve uzantıların daha kapsamlı bir tablosu için referans tablolarımıza bakın.

Soyut bir tür rozeti taşıyan parlak bir veri paketi, ağ bağlantısı üzerinden akmaktadır
Content-Type başlığı, HTTP üzerinden yükle birlikte iletilir.

Yanlış Content-Type neden sorunlara yol açar

Tarayıcılar ve istemciler beyan edilen türe güvenir; bu nedenle yanlış belirtmenin somut sonuçları olur. JSON API yanıtını text/html olarak sunarsanız tarayıcı onu işlemeye çalışabilir ya da katı bir istemci kodunuz çalışmadan önce ayrıştırma hatası verebilir. CSS veya JavaScript dosyasını yanlış türle sunarsanız X-Content-Type-Options: nosniff adlı bir güvenlik özelliği tarayıcının onu uygulamasını engelleyerek sayfa stilinizi veya betiklerinizi sessizce bozar.

İndirmeler de klasik bir sorun kaynağıdır. Bir dosyanın görüntülenmek yerine indirilmesini istiyorsanız tür, Content-Disposition başlığıyla birlikte önem taşır. application/octet-stream olarak gönderilen bir PDF, görüntüleyicide açılmak yerine genel bir dosya olarak indirilir; text/plain olarak gönderilen bir görüntü anlamsız karakterler olarak görünür. Yükleme tarafında yanlış etiketlenmiş bir dosya, saf bir uzantı denetimini atlayabilir; bu nedenle güçlü doğrulayıcılar istemcinin sağladığı türe güvenmek yerine gerçek baytları ("sihirli sayı") inceler.

Tarihsel olarak tarayıcılar, başlık yanlış göründüğünde gerçek türü tahmin etmeye (veya "koklama" yapmaya) çalışırdı. Bu davranış güvenlik açıklarına yol açtı; bu nedenle modern en iyi uygulama her zaman doğru bir Content-Type göndermek ve nosniff ile koklama yapmayı devre dışı bırakmaktır. Kısa özet: her yanıtta türü bilinçli olarak belirleyin; çoğu işleme, indirme ve ayrıştırma hatası kendiliğinden ortadan kalkar.

Sık sorulan sorular

MIME türü ile medya türü arasındaki fark nedir?

İkisi aynı şeydir. "MIME türü" e-postadan gelen eski isimdir; "medya türü" ise IANA ve modern HTTP spesifikasyonlarının tercih ettiği terimdir. Her ikisi de tür/altür etiketine atıfta bulunur.

JSON için doğru MIME türü nedir?

RFC 8259'da tanımlanan application/json'dır. text/json veya application/x-javascript gibi eski alternatifler artık geçerliliğini yitirmiştir ve bazı istemciler bunları reddeder.

application/octet-stream ne anlama gelir?

Daha belirli bir etiketi bulunmayan rastgele ikili veriler için genel türdür. Sunucular bunu bilinmeyen dosya türleri için geri dönüş olarak kullanır; bu genellikle tarayıcıda görüntülenmek yerine indirme tetikler.

CSS veya JavaScript dosyam neden yüklenmiyor?

Sunucu çoğunlukla yanlış Content-Type ile gönderiyor olur. X-Content-Type-Options nosniff olarak ayarlandığında tarayıcı, text/css olmayan CSS'i veya JavaScript türü olmayan betikleri uygulamayı reddeder. Doğru türün gönderilmesi için sunucu yapılandırmasını düzeltin.

MIME türüne karakter kümesi ekleyebilir miyim?

Evet, metin biçimleri için text/html; charset=utf-8 gibi bir parametre kullanılabilir. JSON için bu gereksizdir çünkü biçim spesifikasyon gereği her zaman UTF-8'dir; yine de eklemek bir zarara yol açmaz.

Dosya uzantısı MIME türünü belirler mi?

HTTP üzerinde hayır. Hangi Content-Type gönderileceğine sunucu karar verir ve tarayıcı bu başlığa güvenir. Uzantı yalnızca açık bir tür sağlanmadığında araçlar ve işletim sistemleri için bir ipucu görevi görür.