ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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/…

R
Ry-

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 attribute。您不能省略 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 off for /r . %%X in (*.js) do ( svn propset svn:mime-type text/javascript "%%X" ) 执行时,会将存储库中所有 JS 文件的 mime 类型更改为文本/javascript。然后,您必须使用新的 mime 类型将 JS 文件提交到 SVN。
K
KingCrunch

x- 开头的 mime 类型未标准化。如果是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)
B
Björn

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


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

使用 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 已部署的脚本媒体类型和兼容性 各种未注册的媒体类型以一种特殊的方式用于标记和交换用 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/javascript 和 text/ecmascript,但将它们标记为“已过时”。不鼓励使用上面部分列出的实验性和未注册的媒体类型。媒体类型 * application/javascript * application/ecmascript 也在本文档中定义,旨在供普遍使用,应改为使用。本文档定义了 text/javascript、text/ecmascript 和 application/javascript 类型的等效处理要求。与本文档中定义的其他媒体类型相比,媒体类型 application/ecmascript 的使用和支持要少得多。利用它的优势,本文档为这种类型定义了更严格的处理规则,以促进更多的互操作处理。

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