Javasript的 MIME type

以前只知道text/javascript, 后来逐渐接触application/javascript, application/x-javascript

感觉有点凌乱了, 于是想搞清楚它们的关系

MIME type

首先要搞清楚MIME, 英文全称为Multipurpose Internet Mail Extensions, 是描述消息内容类型的因特网标准。

这个解释好像有点难懂, 没关系, 知道MIME type是干嘛的就好了: The MIME type of a resource is a technical hint about the use and format of that resource, 也就是说根据MIME type, Web程序就知道某个资源的用途并知道应该如何解析它.

虽然MIME type好像有点拗口, 但也有好处, 那就是可以与CSS的 media type 区分开来

javascript的 MIME type

html规范定义的MIME type 如下:

  • application/ecmascript
  • application/javascript
  • application/x-ecmascript
  • application/x-javascript
  • text/ecmascript
  • text/javascript
  • text/javascript1.0
  • text/javascript1.1
  • text/javascript1.2
  • text/javascript1.3
  • text/javascript1.4
  • text/javascript1.5
  • text/jscript
  • text/livescript
  • text/x-ecmascript
  • text/x-javascript

这么多, 是不是头都大了.

冷静一下, 再看这篇文章, 这里对每个类型都有简单的说明

细心看下来, 发现这么多类型中, 除了text/javascript, 其余全是”历史遗留类型”. 也就是现在用的话, 都是用text/javascript

scipt标签不写type

如果html里script标签不写type, MIME type 会是text/javascript吗?

MDN文档指出, script不写type则把script当作Javasript. 但这点并没有回答上面的问题

于是我自己利用Nginx作测试, 最终得出结论:

是的, script的默认type是text/javasript, 查看Response Headers, 可见Content-Type:text/javascript

但这里还有几个前提:

  1. 页面不是通过file协议本地打开的
  2. 服务器的MIME type配置没对覆盖此值

第二点怎么理解呢? 以Nginx为例, 如果修改mime.types文件如下所示:

1
2
3
types {
application/javascript js;
}

则查看Response Headers, 可见Content-Type:application/javascript

Fork me on GitHub