Javascript MIME类型

Mar*_*ens 155 javascript mime-types

基于这个问题:jQuery代码无法在IE中运行

因此text/javascript在HTML文档中使用,因此Internet Explorer可以理解它.但我想知道,你什么时候使用application/javascript,更重要的是,你为什么要用它而不是text/javascript

bob*_*nce 241

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

它应该application是什么原因与该类型是可读的还是可执行的无关.这是因为语言/类型本身有自定义字符集确定机制,而不仅仅是泛型charset参数.子类型text应该能够被代理转码到另一个字符集,从而改变charset参数.这不适用于JavaScript,因为:

一个.RFC说用户代理应该对脚本进行BOM嗅探以确定类型(我不确定是否有任何浏览器实际执行此操作);

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

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

出于同样的原因,application/xml正式首选text/xml:XML有自己的带内字符集信令机制.每个人都忽略application了XML.

text/javascript并且text/xml可能不是官方的正确的事情,但是出于兼容性的原因,每个人今天使用的东西,以及它们不正确的原因实际上完全不重要.

  • 最"兼容"的解决方案是不要在响应中包含任何内容类型.RFC声明如果没有明确的内容类型,接收器会将其解释为"按上下文"*,这对于所有浏览器来说都是正确的行为,就在第一批浏览器中 (4认同)
  • @Pacerier-我知道此评论已有5年历史了,但是出于安全原因,今天通常最好包括mime类型,尤其是对于论坛类型的网站。让接收者解释类型,将恶意的javascript文件上传为图像,然后让浏览器解释并运行该脚本,这样就容易受到攻击。最好让服务器返回所有响应的mime类型,并使用标头X-Content-Type-Options:nosniff来防止浏览器解释类型。 (2认同)

Har*_*men 17

Javascript的MIME类型的问题是多年来没有标准.现在我们已经将application/javascript作为官方MIME类型.

但实际上,MIME类型根本不重要,因为浏览器可以确定类型本身.这就是为什么HTML5规范声明type="text/javascript"不再需要它.


the*_*ejh 5

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

  • @Benn:也许是因为IE用户必须阅读所有JS文件,因为它们没有正确执行?至少,它是微软的诚实;) (20认同)

Mat*_*ens 5

过去对此存在很多困惑和分歧,其他答案对此进行了一些详细解释。

RFC9239通过与实现实际情况保持一致最终解决了这种混乱。application/javascript现已正式过时; text/javascript是唯一正确的 JavaScript MIME 类型。