应用程序/x-javascript和文本/javascript内容类型之间的差异

应用程序/x-javascript和文本/javascript内容类型之间的差异,javascript,http-headers,content-type,Javascript,Http Headers,Content Type,这些标题之间有什么区别 Content-Type: application/javascript Content-Type: application/x-javascript Content-Type: text/javascript 哪一个最好,为什么 请不要说它们是相同的——如果它们是相同的,就不会有三个。我知道这两种工作方式,但我想知道它们的区别。以x-开头的mime类型没有标准化。就javascript而言,它有点过时了。 第二个代码段的附加说明 <?Header('Conten

这些标题之间有什么区别

Content-Type: application/javascript
Content-Type: application/x-javascript
Content-Type: text/javascript
哪一个最好,为什么


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

x-
开头的mime类型没有标准化。就javascript而言,它有点过时了。 第二个代码段的附加说明

<?Header('Content-Type: text/javascript');?>
但是,javascript完全正确的mime类型是

application/javascript

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

您应该使用
应用程序/javascript
,这在中有说明

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

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


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

,根据RFC 4329,javascript的正确MIME类型应该是
application/javascript
。然而,较旧的IE版本在这方面遇到了瓶颈,因为他们希望
text/javascript

使用type=“application/javascript”

对于HTML5,type属性是过时的,您可以删除它。注意:根据w3.org,它默认为“text/javascript”,因此我建议添加“application/javascript”,而不是删除它


类型 属性提供脚本的语言或数据的格式。如果 属性存在,其值必须是有效的MIME类型。这个 不能指定字符集参数。默认值,在以下情况下使用 该属性不存在,为“text/javascript”

使用“应用程序/javascript”,因为“文本/javascript”已过时:

RFC 4329:

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

    各种未注册的媒体类型已在临时网络中使用 标记和交换用ECMAScript和 JavaScript。这些措施包括:

    +-----------------------------------------------------+ |text/javascript | text/ecmascript| |text/javascript1.0 | text/javascript1.1| |text/javascript1.2 | text/javascript1.3| |text/javascript1.4 | text/javascript1.5| |text/jscript | text/livescript| |text/x-javascript | text/x-ecmascript| |application/x-javascript | application/x-ecmascript| |application/javascript | application/ecmascript| +-----------------------------------------------------+

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

      * application/javascript
      * application/ecmascript
    
    也在本文件中定义,用于通用 使用和应改为使用

    本文件定义了
    键入text/javascript、text/ecmascript和application/javascript。
    媒体类型应用程序/ecmascript的使用和支持是

    这份文件。利用这一优势,本文档定义了
    此类型的处理规则更严格,以促进更高的互操作性
    处理


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

    据我所知,IE没有给出一个猴子的HTTP内容类型所说的;只有HTML
    type
    属性表示的内容(在HTML5草稿中,JavaScript可能会忽略该属性)。@Quentin Ah。。。这就是给我带来麻烦的原因。谢谢非常感谢你的详细回答。还有一个问题——你说过我可以完全省略它(只有HTML5?)——但我的问题(后来有人编辑过)是专门关于PHP中的JS的——如果我完全省略它,它会在所有服务器/浏览器上作为PHP/JS组合工作吗?你可以省略
    元素上的
    type
    属性。你不能忽略
    内容类型
    HTTP头…永远(如果你不在PHP中指定它,那么PHP将默认为
    text/html
    ,这是非常错误的)。按照人类可读的逻辑,CSS不也应该在应用程序下而不是文本下分类吗?@frnhr你对这个答案的编辑改变了预期的含义(这说明
    text/javascript
    已经过时,
    application/x-javascript
    是实验性的)。更糟糕的是,它使答案的开头不连贯,一个块说
    text/javascript
    只是毫无明显原因地挂在答案的顶部。在SVN中,一定要使用text/javascript。SVN将任何不以text/开头的内容视为二进制。要修复整个SVN工作副本,您需要创建一个mime.cmd文件c包含以下内容:
    @echo off
    用于/r
    
      * application/javascript
      * application/ecmascript