Chrome说"资源被解释为脚本但是使用MIME类型text/plain传输.",是什么给出的?

Sha*_*aoz 314 google-chrome mime-types

在FF和所有,我的JavaScript工作正常.但在Chrome中,它会显示以下消息:

资源解释为脚本,但使用MIME类型text/plain进行传输.

我检查了所有的脚本标签,他们都有MIME type="text/javascript".它甚至用jquery和jquery ui这样说.Chrome有什么问题?

有什么问题和解决方法?这是我必须在浏览器的"选项"中更改的内容,还是来自服务器,还是我必须调整代码?

SLa*_*aks 203

这意味着服务器正在发送Javascript HTTP响应

Content-Type: text/plain
Run Code Online (Sandbox Code Playgroud)

您需要配置服务器以发送JavaScript响应

Content-Type: application/javascript
Run Code Online (Sandbox Code Playgroud)

  • 嗯什么时候没有服务器,但脚本实际上是本地文件系统上的JSONP文件?我想那时只是忽略了警告,因为它不严重而且超出了你的控制范围? (6认同)
  • 我正在使用Weblogic Server 11g,但我不知道在哪里可以配置MIME.拜托,你能告诉我路吗? (3认同)
  • 应该是`content-type:application/javascript`,`application/x-javascript`是**不是**[RFC](http://www.rfc-editor.org/rfc/rfc4329.txt)或ECMAScript标准. (2认同)

Poi*_*ars 125

这与jQuery或任何客户端脚本代码的怪癖无关.这是服务器端问题:服务器(-side应用程序)未发送客户端脚本资源的预期HTTP Content-Type头字段值.如果Web服务器配置不当,配置错误或服务器端应用程序(例如,PHP)正在生成客户端脚本资源,则会发生这种情况.

适用于ECMAScript实现的适当MIME媒体类型包括:

  • text/javascript(注册为已过时,未弃用;但仍然有效,并且支持最佳)
  • text/ecmascript(已注册为已废弃,未弃用;但仍有效)
  • application/javascript
  • application/ecmascript

它们包括application/x-javascript,因为上面列出的MIME媒体类型是标准树中注册的类型(因此没有必要,并且不应该再使用实验性的那些).参看 RFC 4329,"脚本媒体类型"(2005 CE)和我的测试用例:支持脚本媒体类型.

一种解决方案是尽可能配置服务器,如已推荐的那样.对于Apache,这可以像添加指令一样简单

AddType text/javascript .js
Run Code Online (Sandbox Code Playgroud)

(有关详细信息,请参阅Apache HTTP Server文档).

但是,如果客户端脚本资源是由服务器端应用程序(如PHP)生成的,则必须Content-Type显式设置头字段值,因为默认值很可能text/html:

<?php
  header('Content-Type: text/javascript; charset=UTF-8');
  // ...
?>
Run Code Online (Sandbox Code Playgroud)

(那些和类似的语句必须在任何其他输出之前 - 请参阅PHP手册 - 否则HTTP消息体已被认为已经开始,并且发送更多的头字段为时已晚.)

服务器端生成可以很容易地发生在客户端脚本资源上,即使你在服务器上有简单的.js文件,如果它们被提供时从它们中删除了注释,如果它们都被打包成一个大的响应(以减少请求的数量,可以更高效),或者它们由服务器端应用程序以任何其他方式最小化.

  • 完善.它给了我很多帮助.对我来说,添加"AddType"声明已经成功了.:-) (4认同)

ega*_*rdo 19

对于Java应用程序服务器,例如Weblogic

1)确保您的weblogic.xml文件没有错误

像这个:

    <?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
                  xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
    <context-root>MyWebApp</context-root>
</weblogic-web-app>
Run Code Online (Sandbox Code Playgroud)

2)将javascript的mime类型添加到web.xml文件中:

    ...
        </servlet-mapping>

        <mime-mapping>    
            <extension>js</extension>        
            <mime-type>application/javascript</mime-type>        
        </mime-mapping>

        <welcome-file-list>
    ...
Run Code Online (Sandbox Code Playgroud)

这也适用于其他Java容器 - Tomcat等application/javascript是目前唯一有效的mime类型; 其他人喜欢text/javascript被弃用.

3)您可能需要清理浏览器缓存或按CTRL-F5


mop*_*syd 8

如果您使用php文件生成javascript,请将其添加为文件的开头:

<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>
Run Code Online (Sandbox Code Playgroud)


小智 7

我有这个问题,我想出了如何解决它.

当样式(CSS)文件与引用.css文件的PHP文件的编码不同时,会发生这种情况

例如,在Unix编码中使用jQuery.js并在UTF-8中使用index.php会导致此问题,因此您必须使它们都是UTF-8或任何其他编码,只要它们相同即可.