提供 JavaScript 文件时,使用 application/javascript 还是 application/x-javascript 更好

IT技术 javascript http content-type
2021-01-25 23:31:06

整个问题符合标题。并添加一些上下文:我不是根据规范所说的内容询问什么是最好的,而是考虑到当今部署的浏览器的组合,什么是最好的。

一些数据点:

  • Google 使用text/javascript其主页上使用的 JS。
  • Googletext/javascript在 Google Docs 上使用
  • Google 使用application/x-javascriptAjax 库服务来提供 JavaScript 文件
  • 雅虎application/x-javascript用来服务他们的 JS。
  • 雅虎使用application/x-javascript在其主页上提供的 JavaScript。
6个回答

根据 IETF截至 2021 年 2 月 22 日ECMAScript 媒体类型更新RFC-4329已过时。

所以:

  • text/javascript 是推荐标准(IETF 和 MDN)
  • application/x-javascript 在决定搬到……时是实验性的
  • application/javascript 已过时
@big_m — 那是因为许多浏览器无法识别,application/javascript所以指定它会导致它们忽略脚本。用户代理不应该忽略 Content-Type。type 属性告诉他们期望什么。如果他们不支持它,他们就不应该费心提出要求。如果服务器然后说它是不同的,他们应该继续说它而不是 HTML 所说的(至少根据 HTTP,您可能正在查看不同的规范,您没有提供任何链接)。
2021-03-16 23:31:06
@Quentin,我指的script是我链接到元素上的 HTML 5 部分我对该部分的阅读与您所描述的不同;它似乎非常重视type属性Content-Type,除了确定字符编码外,没有提到检查我同意用户代理验证 Content-Type 是否符合预期似乎是明智的,但我在 HTML 规范中没有发现任何需要甚至建议这样做的内容。
2021-03-21 23:31:06
嗯,有人忘了告诉 W3C text/javascript 已经过时了。这似乎是默认HTML 5::scratches head:: 似乎(如果我对本节的粗略阅读是正确的)用户代理应该只在type属性上进行,因此忽略了Content-type正确的行为。
2021-03-23 23:31:06
不好了!庞大、单一、缓慢的组织一定是对的!规格一定是错的!呐。我将继续相信规范和我自己在大型(缓慢)公司中的经验,即使其中一家曾经雇用过我。
2021-03-30 23:31:06
几个月前的这个问题正好相反。有人误会了 :) “Kelly 是对的,浏览器倾向于信任随响应标头发送的 MIME 类型而不是脚本标签的类型属性” stackoverflow.com/questions/189850/...
2021-04-02 23:31:06

在大多数情况下,服务器发送的 mime 类型没有实际区别。我会使用application/javascript,这也是 RFC 推荐的。

这是这个问题的 2020 年答案。

text/javascript是符合HTML 标准的正确 JavaScript MIME 类型,其中指出:

服务器应该text/javascript用于 JavaScript 资源。服务器不应为 JavaScript 资源使用其他 JavaScript MIME 类型,并且不得使用非 JavaScript MIME 类型。

而且

[…] 在本规范中用于指代 JavaScript 的 MIME 类型是text/javascript,因为这是最常用的类型,尽管它是根据 RFC 4329 正式废弃的类型。

正在努力在 IETF 级别的 RFC 中反映这一现实:https : //datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/

任何声称“text/javascript已过时”的说法都是基于 RFC 4329,HTML 标准和上述 IETF 草案(即即将发布的 RFC)都在明确纠正。

如果您选择在页面中使用 application/javascript for js,IE7 和 IE8 将不会运行您的脚本!你想要的都怪微软,但如果你想让大多数人运行你的页面,请使用 text/javascript。

当您说“application/javascript”不起作用时,您的意思是将其设置为 HTTP 响应的内容类型还是脚本标记的“type”属性?最初的问题是关于 HTTP 响应的内容类型。根据其他答案,似乎只有脚本标签上的“type”属性的值才会在 IE 中以任何一种方式产生影响。
2021-04-10 23:31:06

它曾经是language="javacript"然后变成了type="text/javascript"现在是type="application/javacript"好吧,这变得愚蠢了。一些较旧的浏览器无法识别新application/javascripttext/javascript. 我计划继续使用这一点,否则我会浪费我的时间了几个小时试图改变的每个实例text/javascript进入application/javascript
现在有一天,情况可能正好相反。总有一天,最新的浏览器可能会拒绝旧技术,以便严格遵守标准。
但是,在浏览我网站的人开始抱怨“自从升级我的浏览器后,大约 50% 的网站消失了”之前,我没有动力更改我网站中的代码。

很有预见性!
2021-04-02 23:31:06