Yaygın MIME türleri
Sunucular ve yükleme formları bu dizgilere güvenir; yanlış tür, önizlemeyi, indirmeyi veya CSP’yi bozabilir.
| Tür | MIME türü | Tipik uzantı |
|---|---|---|
| HTML | text/html | .html |
| CSS | text/css | .css |
| JavaScript | text/javascript | .js |
| JSON | application/json | .json |
| XML | application/xml | .xml |
| Düz metin | text/plain | .txt |
| CSV | text/csv | .csv |
| application/pdf | ||
| ZIP | application/zip | .zip |
| PNG | image/png | .png |
| JPEG | image/jpeg | .jpg |
| GIF | image/gif | .gif |
| WebP | image/webp | .webp |
| SVG | image/svg+xml | .svg |
| ICO | image/x-icon | .ico |
| MP3 | audio/mpeg | .mp3 |
| WAV | audio/wav | .wav |
| MP4 | video/mp4 | .mp4 |
| WebM | video/webm | .webm |
| WOFF2 | font/woff2 | .woff2 |
| URL kodlu form | application/x-www-form-urlencoded | — |
| Multipart form | multipart/form-data | — |
Notlar
- Bazı tarayıcılar içeriği tahmin etse bile sunucunuz yine de doğru türü göndermeli.
- JS’nin resmî türü text/javascript’dir (application/javascript artık kullanılmıyor).
MIME türünün aslında neyi kontrol ettiği
Bir MIME türü, sunucunun bir yanıta eklediği ve tarayıcıya baytların ne olduğuna dair bilgi veren etikettir. text/html bir sayfa oluşturur, application/pdf bir okuyucu açar, image/svg+xml satır içi çizilebilir ve application/octet-stream bir indirme istemi tetikler. Görünüşte iki dosya, bu tek başlığa dayanarak tamamen farklı davranabilir. Tarayıcılar, yükleme formları, e-posta istemcileri ve içerik güvenliği kuralları bunu okur; bu nedenle yanlış yapmak, bozuk ön izlemelere, zorla indirmelere ve engellenen betiklere yol açan yaygın bir nedendir.
text/ ve application/ günümüzde nerede geçerlidir
Eski tavsiyeler JavaScript için application/javascript öneriyordu; güncel standart text/javascript'tir ve application/javascript kullanımdan kalkmıştır. CSS text/css, HTML text/html, düz metin text/plain ve CSV text/csv'dir — tümü insan tarafından okunabilir olacak şekilde tasarlandıkları için text/* sınıfındadır. Yapılandırılmış formatlar application/* sınıfındadır: application/json, application/xml, application/pdf, application/zip. Önemli istisna SVG'dir; XML olmasına rağmen tarayıcıların görüntülemesi yerine indirmemesi için image/svg+xml olarak sunulmalıdır.
Yanlış türler yüklemeleri ve güvenliği bozar
Yanlış etiketlenmiş bir yükleme, hata kaynaklarının klasik bir örneğidir: text/plain olarak sunulan bir JSON dosyası bir API istemcisi tarafından reddedilebilir, octet-stream olarak döndürülen bir görüntü gösterilmek yerine indirilir ve text/html olarak sunulan bir betik tarayıcı tarafından engellenir. Katı Content-Security-Policy kuralları MIME türüne bağlıdır; bu nedenle yanlış türle sunulan bir stil sayfası doğrudan reddedilebilir. Bir ön izleme veya indilme tuhaf davrandığında, yanıtın Content-Type'ını kontrol etmek genellikle en hızlı tanılama yoludur.
Karakter kümesi ve içerik dedikodu
Metin türlerinde MIME türünü bir karakter kümesi ile eşleştirin — çok dilli her şey için text/html; charset=utf-8 ve application/json; charset=utf-8 güvenli varsayılanlardır. Eski tarayıcılar, dosyanın baytlarından bir tür tahmin etmek için içerik dedikodusu (content sniffing) kullanırdı ve saldırganlar bundan yararlandı; X-Content-Type-Options: nosniff göndermek tarayıcılara beyan edilen türe güvenmeleri söyler. Dosya uzantısına güvenmek yerine her zaman açık ve doğru bir Content-Type gönderin; tarayıcı asla dosya uzantısını görmez.
Türleri sunucuda ve formlarda ayarlama
Türün nereden geldiği önemlidir. Statik barındırma hizmetleri uzantıları otomatik eşler ancak web framework'leri genellikle türü açıkça ayarlamayı gerektirir — Express'te res.type('json') ile, Nginx'te types bloğu aracılığıyla ve Cloudflare Pages'te üstbilgiler veya dosya uzantısı aracılığıyla. HTML formları, dosyalar için multipart/form-data ve düz alanlar için application/x-www-form-urlencoded kullanırken JSON bekleyen bir API application/json gönderir. Yanlış olanı göndermek, istek üst bilgisini inceleyene kadar gizemli görünen 415 Unsupported Media Type ve 400 yanıtlarının sessiz bir kaynağıdır.
Tanınmaya değer diğer aileler
Günlük web formatlarının ötesinde, tanınmaya değer birkaç aile vardır. Yazı tipleri font/woff2 ve font/ttf kullanır. Görüntüler biçime göre ayrılır — image/jpeg, image/png, image/webp, image/avif, image/gif — ses ve video ise audio/mpeg, audio/ogg, video/mp4 ve video/webm kullanır. Arşivler ve ikili dosyalar application/zip, application/gzip ve application/octet-stream'dir. Bir API tanıyamadığı bir dosya döndürdüğünde octet-stream dürüst cevaptır: istemcinin tahmin etmek yerine indirmesini zorlar; bu da içerik bilinmediğinde tam olarak istediğiniz davranıştır.
Sık sorulan sorular
- .json dosyası için hangi MIME türü kullanılmalı?
- JSON dosyaları ve API yanıtları için application/json kullanın. Bu standart türdür ve mümkünse UTF-8 ile gönderilmelidir.
- .js dosyalarının MIME türü nedir?
- JavaScript’in resmî türü text/javascript’dir. Eski application/javascript kullanımdan kalkmıştır.
- Bir SVG görselinin MIME türü nedir?
- SVG dosyaları image/svg+xml kullanır. Tarayıcılar SVG’yi yalnızca bu türle satır içinde gösterir.