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

时间:2010-08-12 12:04:43

标签: google-chrome mime-types

在FF和所有,我的JavaScript工作正常。但在Chrome中,它会提供以下信息:

  

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

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

问题及解决方法是什么?我需要在浏览器的“选项”中进行更改,还是从服务器更改,还是必须调整代码?

20 个答案:

答案 0 :(得分:203)

这意味着服务器正在使用

发送Javascript HTTP响应
Content-Type: text/plain

您需要将服务器配置为使用

发送JavaScript响应
Content-Type: application/javascript

答案 1 :(得分:125)

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

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

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

他们包括application/x-javascript,因为上面列出的MIME媒体类型现在是标准树中注册的那些(所以没有必要,也没有想要的,再使用实验性的)。参看RFC 4329,“脚本媒体类型”(2005 CE)和我的Test Case: Support for Scripting Media Types

一种解决方案是尽可能配置服务器,如建议的那样。对于Apache,这可以像添加指令

一样简单
AddType text/javascript .js

(有关详细信息,请参阅Apache HTTP Server documentation。)

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

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

(那个和类似的语句必须在任何其他输出之前 - 参见PHP manual - ,否则HTTP消息体已被认为已经开始,发送更多的头字段为时已晚。)

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

答案 2 :(得分: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>

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

    ...
        </servlet-mapping>

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

        <welcome-file-list>
    ...

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

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

答案 3 :(得分:8)

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

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

答案 4 :(得分:7)

我遇到了这个问题,我想出了如何修复它。

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

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

答案 5 :(得分:3)

在你的apache的httpd.conf中,只需添加一行:

AddType application/x-javascript .js

答案 6 :(得分:3)

我收到此调试消息的原因比其他答案更简单:这是当您没有获得足够的睡眠并通过使用css文件的语法引用js文件时收到的错误消息。如,

<link rel='stylesheet' type='text/css' href='clearly_javascript.js'/>

而不是

<script src='clearly_javascript.js'></script>

我以为我会把它放在这里,因为这是搜索错误消息时出现的第一篇文章。

答案 7 :(得分:2)

奇怪的问题,但这有助于我解决我的问题。有时甚至最简单的事情很难弄明白......

而不是使用 我的脚本标记中的/js/main.css我使用了js/main.css

,它确实有所作为。我坐在WAMP / Windows上,我没有vhost,只是使用了localhost/<project>

如果我引用/js/main.css,那么我引用localhost/css/main.css而不引用localhost/<project>/css/main.css

当你想到它时,它很明显,但如果有人偶然发现这一点,我想我会分享这个答案。

答案 8 :(得分:1)

检查服务器上实际存在的js文件。我有这个问题并发现js文件没有上传到服务器而服务器实际上是返回html页面 - 这是服务器上配置的默认文件(例如default.html)

答案 9 :(得分:1)

对我而言,它只发生在某些页面上,因为我使用window.location代替$location.url(...);这解决了我的问题。花了一段时间才弄明白:)

答案 10 :(得分:1)

如果您正在使用Joomla!并且在尝试包含(.js)JavaScript文件时遇到这个恼人的错误,那么以下解决方案适合您。

最可能出现的问题是,您尝试添加的.js 文件不是,或者您只是错放了.js文件,以及何时的Joomla!没有找到资源,然后它返回一个完整的网页和HTML等完整的404消息,而不是通用的404消息。

网络浏览器将其解释为.js,而它只是一个网页,说明所找到的文件未找到

这适用于

答案 11 :(得分:0)

如果您使用的是AdonisJS(例如REST API),一种避免这种情况的方法是通过以下方式定义响应标头:

response.safeHeader('Content-type', 'application/json')

答案 12 :(得分:0)

在我的情况下,服务器发送了正确的Content-Type,但Content-Encoding不正确。确保仅为gzip资源设置Content-Encoding: gzip。此外,在我修复服务器中的标头后(在我的情况下,Google云端存储),我不得不等待几分钟才能正确反映由于缓存而导致的更改。

答案 13 :(得分:0)

如果您使用的是Spring MVC, 您可以添加以下mvn标记以从Spring Dispatch Servlet中排除资源文件

<mvc:resources mapping="/js/*.js" location="/js/"/>
<mvc:resources mapping="/css/*.css" location="/css/"/>
<mvc:resources mapping="/images/*.*" location="/images/"/>

答案 14 :(得分:0)

我遇到了同样的错误,最后(在我的特定情况下)我在部署描述符(web.xml)中发现了一个问题

问题:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>/</welcome-file>
</welcome-file-list>

解决方案:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/SessionController</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>desktop.jsp</welcome-file>
</welcome-file-list>

答案 15 :(得分:0)

如果其IIS确保您的common HTTP FeaturesStatic Content已启用

答案 16 :(得分:0)

发生这种情况时常见的事情是,如果您只是忘记在您的脚本调用中包含type。根据{{​​3}} - 必需,您必须明确地设置它:

  

type(content-type):此属性指定元素内容的脚本语言,并覆盖默认脚本语言。脚本语言被指定为内容类型(例如,"text/javascript")。作者必须为此属性提供值。此属性有 无默认值

似乎 browsers 的默认值为plain/text

示例:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&language=en"></script>

您也可以在Apache配置中为该文件扩展名设置默认值:

<IfModule mod_mime.c>
    AddType text/javascript .js
</IfModule>

答案 17 :(得分:0)

我在使用Web框架时遇到了这个问题,并通过将相关的javascript文件移动到指定的(通过框架)javascript文件夹来修复它。

答案 18 :(得分:-1)

here simon-sarris发布的答案帮助了我。

  

这帮助我解决了我的问题。

     

Visual Studio安装程序必须在注册表中添加错误行。

     

打开注册表并查看此注册表项:

     

enter image description here

     

看到那把钥匙?内容类型键?将其值从text / plain更改为text / javascript。

     

最后,铬可以再次呼吸。

     

我应该注意,在Windows 7上默认不存在Content Type和PercievedType,因此您可以安全地删除它们,但您需要做的最小值就是编辑。

     

无论如何,我希望这也能为你解决这个问题!

请勿忘记在更改后重新启动系统。

答案 19 :(得分:-1)

尝试通过javascript(在本例中为jQuery)更改数组中的背景图像时遇到了同样的问题。

反正。

而不是:

m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')

这样做:

eval("m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')");

当尝试解析用'结构化的元素内的变量时,Chrome javascript被搞砸了。在我的情况下,它在插入图像阵列之前就停止了。它不是解析图像url +图像名称(在数组内),而是解析图像URL。

您可能需要在代码中搜索并查看其发生的位置。 FF,IE和其他所有都没有这个问题。