何时使用JavaScript MIME类型application / javascript而不是text / javascript?


157

基于这个问题在IE中不工作jQuery代码text/javascript在HTML文档中使用,以便Internet Explorer可以理解。

但我想知道,您什么时候使用application/javascript,更重要的是,为什么要使用它而不是text/javascript


可能的重复数据删除/解释:stackoverflow.com/questions/876561/...
本恩



Answers:


243

从理论上讲,根据RFC 4329application/javascript

假定的原因application与该类型是可读还是可执行无关。这是因为语言/类型本身(而非通用charset参数)规定了自定义字符集确定机制。的子类型text应能够通过代理更改为另一个字符集,从而更改charset参数。JavaScript并非如此,因为:

一个。RFC表示用户代理应该对脚本进行BOM嗅探以确定类型(不过,我不确定是否有任何浏览器确实这样做);

b。浏览器使用其他信息-包括页面的编码,在某些浏览器中script charset属性)来确定字符集。因此,任何尝试对资源进行转码的代理都将破坏其用户。(当然,实际上,没有人会使用转码代理,但这是目的。)

因此,文件的确切字节必须保留准确,这使得它的二进制application类型,而不是技术上基于字符text

出于相同的原因,application/xml正式优于text/xml:XML具有自己的带内字符集信令机制。每个人也都忽略applicationXML。

text/javascripttext/xml未必是官方的正确的事情,但有什么用大家今天兼容性的原因,为什么他们不正确的事情的原因是实际地说完全不重要。


4
最“兼容”的解决方案是根本不在响应中包括任何内容类型。RFC规定没有明确的内容类型,接收器将其解释“上下文”这始终是所有浏览器正确的行为权从最初的浏览器
Pacerier

小心application/javascriptIE和IE在兼容模式下运行IE=8。似乎没有正确评估内联脚本。text/javascript在那里工作正常。
Joscha 2014年

2
@Pacerier-我知道此评论已有5年历史了,但是出于安全原因,今天通常最好包括mime类型,尤其是对于论坛类型的网站。让接收者解释类型,将恶意的javascript文件上传为图像,然后让浏览器解释并运行该脚本,这样就容易受到攻击。最好让服务器为所有响应返回mime类型,并使用标头来X-Content-Type-Options: nosniff防止浏览器解释类型。
sammy_winter

@sammy_winter我到处都看到这样的警告,每次都会畏缩。如果我允许用​​户上传内容,我可能会比“哦,是的,为png文件命名匹配的正则表达式,我可以相信”做更多的验证,不是吗?如果不正确的标头成为“安全问题”,则问题可能更深了,您不认为吗?这与隐藏Server: nginx或nginx发送的内容相同。好像有能力找到一个洞的人都需要显式标头来知道您运行的服务器...
Sahsahae

17

Javascript的MIME类型的问题在于,多年来没有一个标准。现在我们有了application / javascript作为正式的MIME类型。

但是实际上,MIME类型根本不重要,因为浏览器可以确定类型本身。因此,HTML5规范指出type="text/javascript"不再需要。


5

application因为.js-Files不是用户想要读取的东西,而是应该执行的东西。


这是官方的答案,但IE对此感到窒息。
本恩

20
@Benn:也许是因为IE用户由于执行不正确而不得不读取所有JS文件吗?至少,这是微软的诚实;)
thejh 2010年

爱你的意见,但遗憾的是谁也看不懂的JavaScript人仍然使用IE浏览器,所以我们必须解决它:(。
马克Baijens

1
我认为您是否要阅读它与为什么无关。它与数据如何进行转码有关,或者与是否可​​以转码有关。
Zenexer

从技术上讲,HTML和CSS也由浏览器“执行”(解析)以将代码结果生成为可视内容,并不意味着用户要“阅读”它,因此,此答案没有太大意义。我猜对于什么是“文本”和什么是“应用程序”存在很大的困惑。如果我可以就此问题投票,我想说IETF应该将“文本”内容视为textbinary或者application

1

application / javascript是要使用的正确类型,但由于IE6-8不支持它,因此您将不得不使用text / javascript。如果您不关心有效性(不包括HTML5),那么就不要指定类型。


你从哪儿得到的?我很确定它受支持。或者,至少,它将被忽略。
Zenexer 2013年

@Zenexer阅读了他对另一个问题的回答。貌似IE兼容性意味着没有application/javascript
卡米洛·马丁

@CamiloMartin我一直使用IE直到6都可以。他们只是默认使用JavaScript。
Zenexer 2013年

@Zenexer嗯,很奇怪。我想知道其他问答环节中存在什么问题。
卡米洛·马丁

@Zenexer自从我不得不处理这个问题已经有一段时间了,但是这里有一些其他原因导致 IE6-8出现问题。不能完全确定为什么这似乎只在某些时候很重要,但以我的经验,这已经引起了问题。
Radu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.