【问题标题】:When serving JavaScript files, is it better to use the application/javascript or application/x-javascript提供 JavaScript 文件时,使用 application/javascript 还是 application/x-javascript 更好
【发布时间】:2019-11-14 00:54:00
【问题描述】:

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

一些数据点:

  • Google 在其主页上使用的 JS 使用 text/javascript
  • Google 在 Google 文档中使用 text/javascript
  • Google 使用 application/x-javascript 来提供带有 Ajax libraries service 的 JavaScript 文件。
  • Yahoo 使用application/x-javascript 为他们的 JS 提供服务。
  • Yahoo 使用application/x-javascript 在其主页上提供 JavaScript。

【问题讨论】:

  • 有趣。你在你的例子中给出了第三种选择......根据蒂姆的说法,两个大玩家都是错误的(关于标准),这可能只意味着浏览器是宽容的(这里没有什么大新闻)而且可能没关系。
  • 可能被骗:Javascript MIME Type
  • 这里和其他地方的这个问题的答案是模棱两可的。程序员应该交叉手指并希望最好。

标签: javascript http content-type


【解决方案1】:

根据截至 2021 年 2 月 22 日的 IETF ECMAScript Media Types UpdatesRFC-4329 已过时。

因此:

  • text/javascript 是推荐标准(IETF 和 MDN 都推荐)
  • application/x-javascript 在决定搬到……时处于试验阶段。
  • application/javascript 已过时

【讨论】:

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

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

【讨论】:

    【解决方案3】:

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

    text/javascriptthe HTML Standard 中正确的 JavaScript MIME 类型,其中指出:

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

    还有also:

    [...] 在本规范中用于指代 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)都在明确纠正。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 当你说“application/javascript”不起作用时,你的意思是设置为HTTP响应的内容类型还是脚本标签的“type”属性?最初的问题是关于 HTTP 响应的内容类型。根据其他答案,似乎只有脚本标签上的“类型”属性的值才会在 IE 中产生影响。
      【解决方案5】:

      它曾经是language="javacript"。然后它更改为type="text/javascript"。现在是type="application/javacript"。好的,这变得愚蠢。一些较旧的浏览器无法识别新的application/javascript,但仍能识别较旧的text/javascript。我打算继续使用它,否则我将浪费数小时尝试将 text/javascript 的每个实例更改为 application/javascript
      现在有一天,情况可能正好相反。总有一天,最新的浏览器可能会拒绝旧技术,以严格遵守标准。
      但是,直到浏览我网站的人开始抱怨“自从升级我的浏览器后,您的网站大约有 50% 消失了”,我才没有动机更改我网站中的代码。

      【讨论】:

      • 非常有预见性!
      【解决方案6】:

      它曾经是“text/javascript”,但现在已经过时了(参见IANA List),现在应该是“application/javascript”(参见another IANA List)。

      【讨论】:

        猜你喜欢
        • 2023-02-05
        • 2018-12-12
        • 2011-05-05
        • 1970-01-01
        • 2012-03-28
        • 2014-04-27
        相关资源
        最近更新 更多