JavaScript MIME ne zaman metin / javascript yerine application / javascript kullanılır?


157

Sorusu dayanarak IE çalışmıyor jQuery kodu , text/javascriptInternet Explorer, bunu anlamak böylece HTML belgelerinde kullanılır.

Ama merak ediyorum, ne zaman kullanıyorsunuz application/javascriptve daha da önemlisi, neden yerine kullanıyorsunuz text/javascript?


olası çift / açıklama: stackoverflow.com/questions/876561/…
Benn



Yanıtlar:


243

Teorik olarak, uygun RFC 4329 , application/javascript.

Olması gereken neden application, türün okunabilir veya yürütülebilir olmasıyla ilgili değildir. Bunun nedeni, sadece genel charsetparametre yerine dil / türün kendisi tarafından belirlenen özel karakter kümesi belirleme mekanizmaları olmasıdır . Alt türü, textbir proxy tarafından başka bir karakter kümesine dönüştürülüp karakter kümesi değiştirilebilmelidir. Bu JavaScript için geçerli değil çünkü:

a. RFC, kullanıcı aracılarının türü belirlemek için komut dosyasında BOM-koklama yapması gerektiğini söylüyor.

b. tarayıcılar karakter kümesini belirlemek için diğer bilgileri (dahil sayfanın kodlamasını ve bazı tarayıcılarda script charsetözelliği) kullanır. Bu yüzden kaynağı kodlamaya çalışan herhangi bir proxy kullanıcılarını kıracaktır. (Tabii ki gerçekte hiç kimse kod çözme proxy'lerini zaten kullanmaz, ama niyet buydu.)

Bu nedenle dosyanın tam bayt korunması gerekir tam olarak bir ikili hale getiren applicationtipi ve teknik olarak değil karakter tabanlı text.

Aynı nedenden dolayı, application/xmlresmen tercih edilir text/xml: XML'nin kendi bant içi karakter kümesi sinyalleme mekanizmaları vardır. Ve herkes applicationXML için de görmezden geliyor .

text/javascriptve text/xmlresmi Right Thing olmayabilir, ama orada herkes uyumluluk nedenleriyle bugün kullandığı ve onlar doğru olanı değiliz nedenleri pratik olarak tamamen önemsiz konuşuyoruz.


4
En "uyumluluk" çözümü, yanıtta hiçbir içerik türü içermemektir. RFC, açık bir içerik türü olmadan alıcının bunu "bağlamına göre" yorumlayacağını belirtir; bu, ilk tarayıcılardan tüm tarayıcılar için her zaman doğru davranıştır
Pacerier

Dikkatli olun application/javascriptve IE ile uyumluluk modunda çalışıyor IE=8. Satır içi komut dosyaları düzgün değerlendirilmemiş gibi görünüyor. text/javascriptorada iyi çalışıyor.
Joscha

2
@Pacerier - Bu yorumun 5 yaşında olduğunu biliyorum, ancak bugün güvenlik nedenleriyle, özellikle forum türü web siteleri için mime türlerini dahil etmek en iyisidir. Alıcının türü yorumlaması, kötü amaçlı bir javascript dosyasını resim olarak yükleyerek ve ardından tarayıcının bu komut dosyasını yorumlamasını ve çalıştırmasını sağlayarak saldırıyı açık bırakır. Sunucunun tüm yanıtlar için mime türleri döndürmesi X-Content-Type-Options: nosniffve tarayıcının türü yorumlamasını önlemek için üstbilgiyi kullanması daha iyidir .
sammy_winter

@sammy_winter Bunun gibi uyarıları her yerde görüyorum ve her seferinde kısıldım. Kullanıcıların içerik yüklemesine izin verirsem, muhtemelen "oh evet, png dosyası için eşleşen regex adı, buna güvenebilirim" den daha fazla doğrulama yaparım, değil mi? Yanlış başlık bir "güvenlik sorunu" haline gelirse, sorun belki daha derin bir yerdedir, değil mi? Bu, gizleme Server: nginxveya nginx'in gönderdiği her şeyle aynıdır . Sanki kim bir delik bulabiliyorsa, hangi sunucuyu çalıştırdığınızı bilmek için açık bir başlığa ihtiyaç duyar ...
Sahsahae

17

Javascript'in MIME türü ile ilgili sorun, yıllardır bir standart olmamasıdır. Şimdi resmi bir MIME türü olarak application / javascript var .

Ancak aslında, tarayıcı türün kendisini belirleyebileceğinden MIME türü hiç önemli değildir. Bu yüzden HTML5 özellikleri type="text/javascript"artık gerekli olmadığını belirtir .


5

applicationçünkü .js-Files, kullanıcının okumak istediği bir şey değil, yürütülmesi gereken bir şeydir.


Bu resmi cevap ama IE boğuluyor.
Benn

20
@Benn: Belki IE kullanıcıları düzgün çalışmadığı için tüm JS dosyalarını okumak zorunda kalıyorlar? En azından Microsoft tarafından dürüst;)
thejh


1
Okumak isteyip istemediğinizi, bunun nedeniyle ilgisi olduğunu düşünmüyorum. Verilerin nasıl kodlandığını - veya daha doğrusu, olup olmadığını anlamakla ilgilidir.
Zenexer

teknik olarak, HTML ve CSS ayrıca kodun görsel içerik olarak üretilmesi için tarayıcı tarafından "yürütülür" (ayrıştırılır) ve kullanıcının bunu "okuması" amaçlanmamıştır, bu nedenle bu cevap pek mantıklı değildir. Ben "metin" ve "uygulama" nedir konusunda büyük bir karışıklık var sanırım. Ben bu konuda oy olsaydı, ben IETF olarak "metin" içeriğini düşünmelisiniz derim textve binaryya kadar applicationvb -ORa "resim" olarak bahsedilen tipteki "amaçlı" veya "belgenin",

1

application / javascript kullanılacak doğru tiptir ancak IE6-8 tarafından desteklenmediği için metin / javascript ile sıkışmış olacaksınız. Geçerlilikle ilgilenmiyorsanız (HTML5 hariç), yalnızca bir tür belirtmeyin.


Bunu nereden buldun? Eminim desteklenmektedir. Ya da, en azından, görmezden gelinecek.
Zenexer

@Zenexer başka bir sorunun cevabını okudu . Görünüşe göre IE uyumluluğu hayır application/javascript.
Camilo Martin

@CamiloMartin Her zaman 6'ya kadar IE ile iyi kullanıyorum. Sadece varsayılan JavaScript.
Zenexer

@Zenexer Hm, garip. Diğer soru-cevap bölümünde sorunun ne olduğunu merak ediyorum.
Camilo Martin

@Zenexer Bununla başa çıkmak zorunda kaldım bir süre oldu ama burada IE6-8 ile ilgili sorunlara neden olan diğer bazı hesaplar . Bunun neden sadece birkaç kez önemli göründüğünden tam olarak emin değilim ama tecrübelerime göre sorunlara neden oldu.
Radu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.