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

IT技术 javascript http-headers content-type
2021-03-22 11:05:26

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

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

哪一个最好,为什么?

请不要说它们是相同的——如果它们是相同的,就不会有三个。我知道这两种工作 - 但我想知道区别。

4个回答

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

你应该使用application/javascript. 这记录在RFC 中

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

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

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

非常感谢详细的回答。还有一个问题——你说我可以完全省略它(只有 HTML5?)——但我的问题(后来被某人编辑过)专门关于 PHP 中的 JS——它是否可以在所有服务器/浏览器上作为 PHP/JS 组合使用如果我完全省略它??
2021-04-23 11:05:26
@frnhr 你对这个答案的编辑改变了预期的含义(这是说text/javascript已经过时并且application/x-javascript是实验性的)。更糟糕的是,它让答案的开头变得语无伦次,一个块说text/javascript只是无缘无故地在答案的顶部闲逛。
2021-05-01 11:05:26
您可以省略元素type 属性<script>你不能省略Content-TypeHTTP 标头……永远(如果你没有在 PHP 中指定它,那么 PHP 将默认使用text/html哪个是非常错误的)。
2021-05-06 11:05:26
在 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。
2021-05-11 11:05:26
遵循人类可读的逻辑,CSS 不应该被归类为应用程序而不是文本吗?
2021-05-18 11:05:26

以 开头的 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

旧答案,但不知道从短的开放标签开始是否好,直到这不是最佳实践(我们强烈建议您实际上禁用 PHP-SOT)
2021-05-08 11:05:26

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

据我所知,IE 并没有给出 HTTP 内容类型所说的内容;只有 HTMLtype属性所说的内容(在 HTML 5 草案中,JavaScript 可以省略该属性)。
2021-04-22 11:05:26
@Quentin 啊...这就是给我带来麻烦的原因。谢谢!
2021-05-20 11:05:26

使用 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 类型。不得指定字符集参数。如果属性不存在,则使用的默认值是“text/javascript”。

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

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

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

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

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

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

  * application/javascript
  * application/ecmascript

本文档中也定义了这些内容,旨在供通用使用,应改为使用。

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

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