【问题标题】:Difference between application/x-javascript and text/javascript content typesapplication/x-javascript 和 text/javascript 内容类型之间的区别
【发布时间】:2012-03-28 16:30:46
【问题描述】:

这些标头有什么区别?

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

哪个最好,为什么?

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

【问题讨论】:

  • 差异也是您的脚本没有被压缩的一个典型原因。确保您在 httpCompression 中为您所服务的实际类型输入了一个条目,并注意 IIS Express 默认仅压缩 application/x-javascript 和 text/*。
  • 注:“javascript mime 类型”的完整列表可在此处找到:html.spec.whatwg.org/multipage/…。即,当指定nosniff 指令时,这是浏览器应允许script 标签的type 属性的值列表。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…

标签: javascript http-headers content-type


【解决方案1】:

text/javascript 已过时,application/x-javascript 是实验性的(因此有x- 前缀),用于过渡时期,直到application/javascript 可以标准化。

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

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

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

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

【讨论】:

  • 非常感谢您的详细回答。还有一个问题-您说过我可以完全省略它(仅 HTML5 ?)-但我的问题(后来由某人编辑)专门针对 PHP 中的 JS-它是否可以在所有服务器/浏览器上作为 PHP/JS 组合使用如果我会完全省略它??
  • 您可以省略<script> 元素上的type 属性。您不能省略 Content-Type HTTP 标头……永远(如果您不在 PHP 中指定它,那么 PHP 将默认为 text/html,这是非常错误的)。
  • 按照人类可读的逻辑,CSS不应该也归类为应用程序而不是文本吗?
  • @frnhr 您对此答案的编辑改变了预期的含义(即声明 text/javascript 已过时,application/x-javascript 是实验性的)。更糟糕的是,它使答案的开头不连贯,一个块说text/javascript 只是在没有明显原因的情况下无关紧要地挂在答案的顶部。
  • 在 SVN 中,一定要使用 text/javascript。 SVN 将任何不以 text/ 开头的内容视为二进制。要修复整个 SVN 工作副本,您需要创建一个 mime.cmd 文件,其中包含以下内容:@echo offfor /r . %%X in (*.js) do (svn propset svn:mime-type text/javascript "%%X"),执行时会将存储库中所有 JS 文件的 mime 类型更改为文本/javascript。然后,您必须使用新的 mime 类型将 JS 文件提交到 SVN。
【解决方案2】:

x- 开头的mime 类型不是标准化的。如果是javascript,它有点过时了。 附加第二个代码sn -p

<?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

【讨论】:

  • 旧答案,但不知道从短的开放标签开始是否好,直到这不是最佳做法(实际上我们强烈建议您禁用 PHP-SOT)
【解决方案3】:

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

【讨论】:

  • 据我所知,IE 并没有给出 HTTP 内容类型所说的内容。只有 HTML type 属性所说的(在 HTML 5 草案中,JavaScript 可能会省略该属性)。
  • @Quentin 啊……这就是给我带来麻烦的原因。谢谢!
【解决方案4】:

使用 type="application/javascript"

在 HTML5 的情况下,type 属性已过时,您可以将其删除。注意:根据 w3.org,它默认为“text/javascript”,所以我建议添加“application/javascript”而不是删除它。

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

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

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

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

    在 ad-hoc 中使用了各种未注册的媒体类型 时尚标签和交换用 ECMAScript 编写的程序和 JavaScript。其中包括:

    +--------------------------------------------- --------+ |文本/javascript |文本/ecmascript | |文本/javascript1.0 |文本/javascript1.1 | |文本/javascript1.2 |文本/javascript1.3 | |文本/javascript1.4 |文本/javascript1.5 | |文本/脚本 |文本/现场脚本 | |文本/x-javascript |文本/x-ecmascript | |应用程序/x-javascript |应用程序/x-ecmascript | |应用程序/javascript |应用程序/ecmascript | +-------------------------------------------------- ----+

已知对此类内容使用“text”顶级类型 有问题的。本文档因此定义了 text/javascript 和 text/
ecmascript 但将它们标记为“已过时”。使用实验和
不鼓励使用上面列出的未注册媒体类型。
媒体类型,

  * application/javascript
  * application/ecmascript

在本文档中也有定义,旨在用于常见的 使用并且应该被使用。

本文档定义了
的等效处理要求 类型 text/javascript、text/ecmascript 和 application/javascript。
媒体类型 application/ecmascript 的使用和支持是
远不如
中定义的其他媒体类型广泛使用 这个文件。利用这一点,本文档定义了
这种类型的更严格的处理规则,以促进更多的互操作性
处理。

x-javascript 是实验性的,不要使用它。

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 2012-08-29
    • 2017-09-05
    • 2012-07-14
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    相关资源
    最近更新 更多