- Konu sahibi
- #1
MIME türü yanlış gönderilen dosyalar nasıl düzeltilir?
MIME türü yanlış gönderilen bir dosyayı düzeltmek için önce sunucunun yanıtındaki
Content-Type başlığını kontrol edin, ardından dosya uzantısını doğru MIME türüyle eşleştiren web sunucusu veya uygulama ayarını düzeltin. Önce yanıtın gerçekten beklenen dosya olduğundan emin olun; ardından gereken katmandaki önbelleği geçersiz kılıp yeni yanıtı doğrulayın. Dosyanın içeriğini değiştirmek çoğu durumda çözüm değildir; sorun, dosyanın istemciye hangi türde tanıtıldığıdır.MIME türü nasıl çalışır?
Tarayıcı, indirilen veya çağrılan dosyanın nasıl işleneceğini HTTP yanıtındaki
Content-Type değerine göre belirler. Örneğin JavaScript dosyası text/javascript, CSS dosyası text/css, SVG dosyası image/svg+xml ve WebP görseli image/webp olarak gönderilmelidir.Dosya sunucudan
text/plain, application/octet-stream veya tamamen ilgisiz bir türle gönderiliyorsa tarayıcı dosyayı çalıştırmayabilir, biçimlendirmeyi uygulamayabilir ya da görseli göstermeyebilir. Özellikle X-Content-Type-Options: nosniff kullanıldığında tarayıcı, yanlış türdeki bazı kaynakları tahmin ederek çalıştırmak yerine reddeder.Önce hatayı doğrulayın
Dosyanın gerçekten hangi başlıkla gönderildiğini kontrol etmek için terminalde şu komutu çalıştırın:
Kod:
curl -I https://example.com/path/to/file.ext
Çıktıda şu satıra bakın:
Kod:
Content-Type: text/css
Örneğin
.css dosyası için application/octet-stream görülüyorsa MIME eşlemesi eksik veya yanlış yapılandırılmıştır. Yanıt 301 ya da 302 ise önce yönlendirmenin son adresini inceleyin; -L seçeneğiyle son yanıtı da görebilirsiniz:
Kod:
curl -I -L https://example.com/path/to/file.ext
Tarayıcı geliştirici araçlarında Network panelinden aynı dosyayı seçerek
Response Headers bölümünü kontrol etmek de yararlıdır. Yanıt 404 ise veya gövdesi giriş sayfası/SPA HTML çıktısıysa önce yönlendirme, yetki ve dosya yolunu düzeltin; HTML hata gövdesine text/css ya da JavaScript türü zorlamayın. HTML kaynağında görünen type özniteliği, sunucunun HTTP başlığını düzeltmez; asıl kontrol edilmesi gereken yanıt başlığıdır.| Belirti | Muhtemel kaynak | İlk düzeltme |
|---|---|---|
| Tüm statik dosyalarda yanlış tür | Web sunucusu MIME eşlemesi | Apache veya Nginx yapılandırmasını kontrol edin |
| Yalnız bir uzantı yanlış | Özel uzantı ya da eksik eşleme | Uzantıyı doğru types veya AddType kuralına ekleyin |
| Yalnız indirme uç noktası yanlış | Uygulama veya framework yanıtı | Content-Type başlığını uygulama kodunda düzeltin |
| Değişiklikten sonra eski sonuç | CDN, proxy veya tarayıcı önbelleği | Önbelleği temizleyip yeni yanıtı yeniden doğrulayın |
Sunucu ayarını düzeltme
Apache kullanıyorsanız, ilgili sanal host yapılandırmasına veya izin verilen durumlarda site kökündeki
.htaccess dosyasına doğru türleri ekleyebilirsiniz:
Kod:
AddType text/css .css
AddType text/javascript .js
AddType application/json .json
AddType image/svg+xml .svg
AddType image/webp .webp
Sanalhost/ana yapılandırmayı değiştirdiyseniz doğru yetkiyle apachectl configtest uygulayıp başarıdan sonra reload yapın. .htaccess ise istek sırasında okunur; bu dosyada değişiklik için ayrıca reload gerekmez, fakat ilgili URL’yi isteyerek sonucu doğrulamalısınız.
.htaccess içinde hata oluşursa sunucu 500 yanıtı verebilir; bu durumda ilgili satırları geri alıp hata günlüğünü inceleyin. Paylaşımlı hosting ortamında AddType kullanımına izin verilmiyorsa hosting yöneticisinden MIME eşlemesinin tanımlanmasını istemeniz gerekir.Nginx kullanıyorsanız MIME türleri genellikle
mime.types dosyasından yüklenir. Sunucu yapılandırmasında aşağıdaki yapının mevcut olduğundan emin olun:
Kod:
http {
include mime.types;
default_type application/octet-stream;
}
Eksik bir eşleme varsa mevcut mime.types dosyasındaki types tablosuna doğru satırı ekleyin; aynı uzantıyı gereksiz yere iki kez tanımlamayın. Örneğin wasm için tablo içinde kullanılacak satır şöyledir:
Kod:
application/wasm wasm;
Bu satır tek başına ana yapılandırmaya yazılmaz; mevcut types bloğunun içinde olmalıdır. Alt server/location düzeyinde yalnız birkaç tür içeren yeni bir types tanımlamak, üst düzey tablonun yerine geçerek başka uzantıları etkileyebilir. Değişen yapılandırmanın kopyasını koruyun; panel yönetimli dosyalarda desteklenen düzenleme yolunu kullanın. Yeniden yüklemeden önce doğru yapılandırma ve gerekli okuma yetkisiyle test edin:
Kod:
nginx -t
Beklenen başarı çıktısı yapılandırmanın sözdiziminin geçerli olduğunu belirten bir mesajdır. Test başarısız olursa yeniden yükleme yapmayın; hata satırını düzeltin ve testi tekrarlayın. Başarılı testten sonra Nginx’i yeniden yükleyip
curl -I ile aynı dosyayı tekrar kontrol edin.Hangi katmanı düzeltmelisiniz?
Sorunun kaynağını seçerken dosyanın nereden üretildiğini ayırın:
Uygulama bir dosyayı kendisi üretiyor veya sunuyorsa web sunucusundaki eşleme yeterli olmayabilir. Bu durumda yanıtın
Content-Type başlığını uygulamanın ilgili indirme, API veya medya uç noktasında ayarlayın. JSON yanıtını dosya indirmesi olarak sunmak istiyorsanız Content-Disposition davranışını da ayrıca belirleyin; bu başlık MIME türünün yerine geçmez.Sık yapılan hatalar
- Yalnızca HTML içindeki
script typeveyalinközniteliğini değiştirmek: Bu, sunucunun gönderdiği başlığı düzeltmez. - Her dosyayı
application/octet-streamyapmak: Bu, bilinmeyen dosyaların indirilmesini sağlayabilir ancak CSS, JavaScript, font ve medya dosyaları için doğru çözüm değildir. - Uzantıyı değiştirmek: Dosya içeriğiyle uzantı ve MIME türü birbirini tutmuyorsa istemci tarafında yeni hatalar oluşur.
- Yalnızca tarayıcı önbelleğini temizlemek: Sunucu yanıtı hâlâ yanlışsa sorun yeniden ortaya çıkar.
- CDN veya proxy katmanını kontrol etmemek: Origin sunucusu düzelmiş olsa bile ara katman eski başlığı önbellekten verebilir.
Son kontrolde dosyanın HTTP durum kodu başarılı olmalı,
Content-Type beklenen değerle eşleşmeli ve tarayıcı geliştirici araçlarında MIME kaynaklı bir engelleme görünmemelidir. Değer hâlâ yanlışsa dosyanın geçtiği katmanları sırayla izleyin: uygulama, web sunucusu, proxy/CDN ve tarayıcı önbelleği.Sık sorulan sorular
MIME türü ile dosya uzantısı aynı şey midir?
Hayır. Uzantı sunucunun eşleme yapmasına yardımcı olur; istemciye bildirilen gerçek değer HTTP
Content-Type başlığıdır. Uzantı doğru olsa bile sunucu yanlış başlık gönderebilir.