script标签的type属性所对应的JavaScript MIME类型是什么?

124

JavaScript的MIME类型是什么?

更具体地说,在脚本标签的"type"属性中应该放置什么?application/x-javascripttext/javascript似乎是主要的竞争者。


2
截至本评论日期,被接受的答案是不正确的。参考:https://datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/ - Gibron
5个回答

151

这是一个常见的错误。多年来JavaScript的MIME类型没有被标准化。现在已经正式标准化为"application/javascript"。

更糟糕的是,大多数浏览器实际上根本不使用该属性,至少在脚本标记的情况下是如此。它们会窥探数据包并自行确定类型。

因此,总体来说,对于JavaScript而言,type="text/javascript" 没有任何作用,但它是HTML 4XHTML 1.0规范的一部分。


40
我可以确认,在Internet Explorer中,有 <script type="application/javascript"> 这段代码会失败 - John Millikin
4
标准是一件好事,但有时这些委员会所做的选择令人费解。JavaScript 是文本,text/javascript 才是被使用的,为什么选择 application/javascript 呢?有时候我想知道这些人是否真正生活在现实世界中。 ;) (注:原文笑脸表情后面有空格,此处未翻译) - AnthonyWJones
3
@AnthonyWJones说:“情况很复杂。这是一个标准化的例子,旨在清理野蛮实践造成的混乱局面。使用了多达8种特别定制的MIME类型。委员会提出了一个可靠的建议,但为时已晚。虽然JS是文本,但也是源代码。” - keparo
5
浏览器不会有任何动作... 但 MIME 类型对于代理服务器或 CDN(如 Akamai)非常重要,它们可能会针对已知的 MIME 类型执行一些最后一英里压缩。如果标头干净且标准化,则此类操作更加容易。 - Precipitous
3
根据IETF的ECMAScript媒体类型更新,RFC 4329已经过时。 - Mike
显示剩余2条评论

30

这是我所发现的第一页关于该主题且具有任何意义的内容。

我的综合研究表明:

  1. Keparo所述的,如果您想要在html4和xhtml1中进行验证,则必须使用text/javascript。虽然浏览器会忽略它。
  2. 如果每个人都同意并且万事俱备,那么application/javascript预期将成为新的官方MIME类型。
  3. application/x-javascript(其中x表示非官方)是当前javascript的服务器端MIME引用。
  4. 众所周知,微软通常会决定采取完全不同的做法来进一步混淆和阻碍事情的发展。

总结:目前,如果您希望您的html/xhtml在MSIE中运行并通过W3C验证,则应声明type="text/javascript"。如果您希望您的Web服务器知道您指的是javascript,则使用application/x-javascript


2
+1 如果提到了服务器端的JS。但是,你有没有引用或者出处,证明有人在服务器端使用app/x-js? - Boldewyn
Apache httpd.conf 使用服务器端 JavaScript MIME 来配置以下内容:
  • ForceType(用于非后缀或非标准文件),
  • 输出过滤器(如缩小器、gzip、压缩和任何需要通过 MIME 识别数据类型的其他内容)。 此外,我会给那些使用服务器端 JavaScript 的人打负分,并建议他们认真学习,不要害怕。
- ekerner
另一个SS JavaScript MIME要求的示例是,当您使用服务器端数据库接口脚本/程序动态生成JavaScript代码并从某种数据库中填充变量时。生成的代码必须声明“Content-type: application/x-javascript”作为标头,否则服务器软件 - 甚至客户端软件(如果没有明确声明) - 将无法识别数据为JavaScript(如我之前的评论所述)。 - ekerner
4
看到我之前的评论,2010年的服务器端JavaScript似乎是个笑话,而在过去的10年里,Node.js让我改变了看法。哈哈 - ekerner

6

4
在脚本标记中,我会使用text/javascript。无论如何,这在HTML 4.0规范中都有提到。
有趣的是,标准化了application/javascriptRFC是2006年的,但text/javascript仍然更为常见。这是否又是一种习惯胜过标准的情况呢?它也出现在HTML5中,可能是因为与IE 5和6的兼容性问题相同,就像避免使用PNG图像一样。

1
因为直觉上更合理的是将其称为text/javascript。 - AnthonyWJones
4
理解因人而异。"application/" 不等于 "binary/"。 - outis

0

定义 JavaScript MIME 类型的官方 RFC 是 RFC4329

7. JavaScript媒体类型
7.1. text/javascript(已过时)
类型名称:text 子类型名称:javascript 必需参数:无 可选参数:字符集,请参见第4.1节。 编码考虑: 与[RFC3023]第3.1节中的考虑相同。
安全性考虑:请参见第5节。 互操作性考虑: 除本文档其他部分所述外,无。
发布规范:[JS15] 使用此媒体类型的应用程序: 如本文档所讨论的脚本解释器。
其他信息:
魔数:n / a 文件扩展名:.js Macintosh文件类型代码:TEXT
联系人和电子邮件地址以获取更多信息: 请参见作者地址部分。
预期使用:已过时 使用限制:n / a 作者:请参见作者地址部分。 更改控制器:IESG。
7.2. application/javascript
类型名称:application 子类型名称:javascript 必需参数:无 可选参数:字符集,请参见第4.1节。 编码考虑: 与[RFC3023]第3.2节中的考虑相同。
安全性考虑:请参见第5节。 互操作性考虑: 除本文档其他部分所述外,无。
发布规范:[JS15] 使用此媒体类型的应用程序: 如本文档所讨论的脚本解释器。
其他信息:
魔数:n / a 文件扩展名:.js Macintosh文件类型代码:TEXT
联系人和电子邮件地址以获取更多信息: 请参见作者地址部分。
预期使用:常见 使用限制:n / a 作者:请参见作者地址部分。 更改控制器:IESG。

4
你可以将RFC中所说的内容写下来。 - brunoais

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接