根据问题 jQuery code not working in IE,text/javascript
用于 HTML 文档,以便 Internet Explorer 可以理解。
但我想知道,您什么时候使用 application/javascript
,更重要的是,您为什么要使用它而不是 text/javascript
?
理论上,根据RFC 4329,application/javascript
。
它应该是 application
的原因与该类型是可读还是可执行无关。这是因为语言/类型本身制定了自定义字符集确定机制,而不仅仅是通用的 charset
参数。 text
的子类型应该能够被代理转码为另一个字符集,从而更改字符集参数。这不适用于 JavaScript,因为:
一个。 RFC 说用户代理应该对脚本进行 BOM 嗅探以确定类型(我不确定是否有任何浏览器实际上这样做);
湾。浏览器使用其他信息(包括页面的编码以及在一些浏览器中的 script charset
属性)来确定字符集。因此,任何试图对资源进行转码的代理都会破坏其用户。 (当然实际上没有人使用转码代理,但这就是目的。)
因此,必须准确地保留文件的确切字节,这使其成为二进制 application
类型,而不是技术上基于字符的 text
。
出于同样的原因,application/xml
正式优于 text/xml
:XML 有自己的带内字符集信号机制。对于 XML,每个人都会忽略 application
。
text/javascript
和 text/xml
可能不是官方的 Right Thing,但出于兼容性原因,今天每个人都在使用它们,而它们不是正确的东西的原因实际上完全不重要。
Javascript 的 MIME 类型的问题在于多年来一直没有标准。现在我们将 application/javascript 作为官方 MIME 类型。
但实际上,MIME 类型根本不重要,因为浏览器可以自行确定类型。这就是 HTML5 规范声明不再需要 type="text/javascript"
的原因。
application
因为.js
-文件不是用户想要阅读的东西,而是应该被执行的东西。
text
,并且将 binary
视为 application
-或“图像”中所述类型的“目的”,或“文件”等
application/javascript 是正确使用的类型,但由于 IE6-8 不支持它,您将被 text/javascript 卡住。如果您不关心有效性(不包括 HTML5),那么就不要指定类型。
application/javascript
。
过去对此有很多困惑和分歧,其他答案对此进行了详细解释。
RFC9239 最终通过与实施现实保持一致来解决这种困惑。 application/javascript
现已正式过时; text/javascript
是唯一正确的 JavaScript MIME 类型。
application/javascript
和 IE 在与IE=8
的兼容模式下运行。似乎内联脚本没有正确评估。text/javascript
在那里工作正常。X-Content-Type-Options: nosniff
来防止浏览器解释该类型。Server: nginx
或 nginx 发送的任何内容相同。好像任何能够找到漏洞的人都需要明确的标头才能知道您运行的是什么服务器......