以前只知道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
但这里还有几个前提:
- 页面不是通过file协议本地打开的
- 服务器的MIME type配置没对覆盖此值
第二点怎么理解呢? 以Nginx为例, 如果修改mime.types
文件如下所示:
1 | types { |
则查看Response Headers, 可见Content-Type:application/javascript