javascript-禁用Chrome严格的MIME类型检查

有什么办法可以禁用Chrome中的application/javascript

实际上,我正在跨域发出JSONP请求。 它可以在Firefox上正常工作,但是在使用chrome时,在控制台上会出现一些错误。

拒绝从“ [https://example.com”]执行脚本,因为其MIME类型('text / plain')无法执行,并且启用了严格的MIME类型检查。

它在Mozilla中可完美运行。问题仅在Chrome中出现

这是请求的响应标头。

Cache-Control:no-cache, no-store
Connection:Keep-Alive
Content-Length:29303
Content-Type:text/plain;charset=ISO-8859-1
Date: xxxx
Expires:-1
Keep-Alive:timeout=5
max-age:Thu, 01 Jan 1970 00:00:00 GMT
pragma:no-cache
Set-Cookie:xxxx
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN

解决方法我认为:外部将内容类型设置为application/javascript

5个解决方案
10 votes

服务器应使用JSONP application/javascript的正确MIME类型进行响应,并且您的请求应告诉jQuery您正在加载JSONP .js

请参阅此答案以获取更多详细信息!您也可以看看这个,因为它解释了为什么无法用text/plain加载.js文件。

Grégoire Fruleux answered 2020-07-31T20:45:23Z
7 votes

就我而言,我关闭了nginx上的X-Content-Type-Options,然后工作正常。 但是请确保这会降低您的安全级别。 暂时修复。

# Not work
add_header X-Content-Type-Options nosniff;
# OK (comment out)
#add_header X-Content-Type-Options nosniff;

apache也一样。

<IfModule mod_headers.c>
  #Header set X-Content-Type-Options nosniff
</IfModule>
kujiy answered 2020-07-31T20:45:47Z
0 votes

也曾经有过同样的问题

如果您无法解决问题,则可以在命令行上运行以下命令
cd C:\Program Files\Google\Chrome\Application

注意:您必须导航到chrome的安装路径。
例如:cd C:\Program Files\Google\Chrome\Application

将会打开一个开发者会话chrome浏览器,您现在可以在新的chrome浏览器上启动您的应用了。
我希望这会有所帮助

Fresher answered 2020-07-31T20:46:33Z
0 votes

对于Windows用户:

如果您的自托管服务器(例如,您的自定义CDN)上发生此问题,并且浏览器(Chrome)在尝试加载javascript文件时显示类似application/javascript的内容,

这是您需要做的:

  1. 打开注册表编辑器即application/javascript
  2. 前往application/javascript
  3. 检查内容类型是否为application/javascript
  4. 如果不是,请将其更改为application/javascript,然后重试
Ozesh answered 2020-07-31T20:47:19Z
-2 votes

文件假装其他扩展名时的另一种解决方案

我将var.js文件中的php.js一起使用。

<Files var.js>
    AddType application/x-httpd-php .js
</Files>

然后我在.js文件中编写php代码

<?php
// This is a `.js` file but works with php
echo "var js_variable = '$php_variable';";

当我在Chrome上收到MIME类型警告时,我通过在Content-Type文件中添加.js标头行来修复了该错误。

<?php
header('Content-Type: application/javascript');        // <- Add this line
// This is a `.js` file but works with php
...

安全起见,浏览器将不会执行.js文件,因为apache将文件的Content-Type标头发送为application/x-httpd-php(在.htaccess中定义)。 但是直到htaccess命令模拟为止,apache不会执行php,这是必要的。 因此,我们需要使用php函数header()覆盖apache的Content-Type标头。我想当php发送它而不是apache之前,apache停止发送自己的标头。

kujiy answered 2020-07-31T20:47:58Z
translate from https://stackoverflow.com:/questions/39228657/disable-chrome-strict-mime-type-checking