application / x-javascript和text / javascript内容类型之间的区别


245

这些标题之间有什么区别?

Content-Type: application/javascript
Content-Type: application/x-javascript
Content-Type: text/javascript

哪一个最好,为什么?

请不要说它们是相同的-如果它们相同,就不会有三个。我知道两者都有效-但我想知道两者之间的区别。


1
差异也是未压缩脚本的经典原因。确保在httpCompression中有您要提供的实际类型的条目,并请注意,IIS Express默认仅压缩application / x-javascript和text / *。
rism

注意:可以在此处找到“ javascript MIME类型”的完整列表:html.spec.whatwg.org/multipage/…。即,这是在指定指令时浏览器应允许script标签type属性的值列表nosniffdeveloper.mozilla.org/en-US/docs/Web/HTTP/Headers/...
JohnLBevan

Answers:


320

text/javascript已过时,并且application/x-javascriptx-过渡时期内一直处于实验阶段(因此带有前缀),直到application/javascript可以标准化为止。

您应该使用application/javascript这在RFC中有记录

就浏览器而言,没有区别(至少在HTTP标头中)。这只是一个变化,以便text/*application/*MIME类型组有一个一致的含义在可能的情况。(text/*MIME类型用于人类可读的内容,JavaScript并非旨在直接向人类传达含义)。

注意,在某些较旧的浏览器中,使用script元素application/javascripttype属性会导致脚本被忽略(因为使用未知语言)。要么继续使用text/javascript该属性,要么完全忽略该属性(HTML 5中允许)。

这在HTTP标头中不是问题,因为浏览器普遍(据我所知)要么完全忽略HTTP内容类型的脚本,要么足够现代以识别application/javascript


非常感谢详细的回答。还有一个问题-您已经说过我可以完全省略它(仅HTML5吗?)-但我的问题(后来由某人编辑)是关于PHP中的JS的-它是否可以在所有服务器/浏览器上用作PHP / JS组合如果我完全忽略它?
Obmerk Kronen 2012年

8
您可以忽略元素上的type 属性<script>。您Content-Type永远无法省略HTTP标头…(如果您未在PHP中指定它,那么PHP将默认使用text/html它是非常错误的)。
昆汀

2
遵循人类可读的逻辑,难道CSS也不应该按应用而不是文本分类吗?
法布里西奥磨砂

2
@frnhr您对该答案的编辑更改了预期的含义(表明text/javascript过时且application/x-javascript处于实验状态)。更糟糕的是,它使答案的开头不连贯,有一个方块说,text/javascript只是无缘无故地在答案的顶部闲逛,没有明显的原因。
Mark Amery

1
在SVN中,绝对要使用text / javascript。SVN会将不是以text /开头的任何内容都视为二进制。要修复整个SVN工作副本,您需要创建一个mime.cmd文件,其中包含以下内容:@echo off for /r . %%X in (*.js) do ( svn propset svn:mime-type text/javascript "%%X" ) 执行该文件时,会将存储库中所有JS文件的mime类型更改为text / javascript。然后,您必须使用新的mime类型将JS文件提交到SVN。
Mark Eldridge

21

开头的mime类型x-尚未标准化。如果使用javascript,则有些过时。附加第二个代码段

<?Header('Content-Type: text/javascript');?>

需要short_open_tags启用。你应该避免它。

<?php Header('Content-Type: text/javascript');?>

但是,对于javascript来说,完全正确的mime类型是

application/javascript

http://www.iana.org/assignments/media-types/application/index.html


1
旧的答案,但不知道以短打开标记开头是否不错,除非这不是最佳实践(我们强烈建议您实际上禁用PHP-SOT)
Ben Cassinat 17/09/25

8

根据RFC 4329,JavaScript的正确MIME类型应为application/javascript。但是,较早的IE版本由于期望而对此感到窒息text/javascript


7
据我所知,IE并没有给出猴子对HTTP内容类型的理解;仅HTML type属性说的(在HTML 5草案中,JavaScript可以省略该属性)。
昆汀

@Quentin啊...这就是给我带来麻烦的原因。谢谢!
马丁

3

使用type =“ application / javascript”

如果是HTML5,则type属性已过时,您可以将其删除。注意:根据w3.org,它默认为“ text / javascript”,因此我建议添加“ application / javascript”而不是将其删除。

http://www.w3.org/TR/html5/scripting-1.html#attr-script-type
type属性提供脚本语言或数据格式。如果存在该属性,则其值必须是有效的MIME类型。不能指定charset参数。如果属性不存在,则使用默认值,即“ text / javascript”。

使用“ application / javascript”,因为“ text / javascript”已过时

RFC 4329:http://www.rfc-editor.org/rfc/rfc4329.txt

  1. 部署的脚本媒体类型和兼容性

    各种未注册的媒体类型已以临时方式用于标记和交换以ECMAScript和JavaScript编写的程序。这些包括:

    + ------------------------------------------------- ---- + | 文字/ javascript | 文字/摘要| | 文字/javascript1.0 | 文字/javascript1.1 | | 文字/javascript1.2 | 文字/javascript1.3 | | 文字/javascript1.4 | 文字/javascript1.5 | | 文字/脚本| 文字/实时脚本| | 文字/ x-javascript | 文字/ x文字| | 应用程序/ x-javascript | 应用程序/ x-ecmascript | | 应用程序/ javascript | 申请/摘要| + ------------------------------------------------- ---- +

众所周知,将“文本”顶级类型用于此类内容是有问题的。因此,该文档定义了text / javascript和text /
ecmascript,但将其标记为“过时”。不建议使用
上面部分列出的实验性和未注册的媒体类型。
媒体类型

  * application/javascript
  * application/ecmascript

本文档中也定义了这些术语,它们旨在用于一般用途,应改为使用。

本文档为
text / javascript,text / ecmascript和application / javascript类型定义了等效的处理要求。
与 本文档中
定义的其他媒体类型相比,对媒体类型应用程序/摘要的使用和支持要少得多
。充分利用这一点,本文档
为此类型定义了更严格的处理规则,以促进更多的可互操作
处理。

x-javascript是实验性的,请勿使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.