禁用 Chrome 严格的 MIME 类型检查

IT技术 javascript jquery angularjs google-chrome
2021-02-23 14:01:20

有什么办法可以strict MIME type checking在 Chrome 中禁用

实际上,我正在跨域发出 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

6个回答

服务器应该以正确的 JSONP MIME 类型响应,application/javascript并且您的请求应该告诉 jQuery 您正在加载 JSONPdataType: 'jsonp'

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

就我而言,我关掉了X-Content-Type-Optionsnginx再正常工作。但请确保这会稍微降低您的安全级别。将是一个暂时的修复。

# 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>
这个解决方案对我来说很好用 <IfModule mod_headers.c> #Header set X-Content-Type-Options nosniff </IfModule>
2021-05-10 14:01:20
当然,降低站点的安全性,而不是解决实际问题!参见:stackoverflow.com/questions/18337630/...
2021-05-16 14:01:20

也有过同样的问题,

如果您无法解决问题,您可以在命令行上运行以下命令
chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security

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

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

同意.. 但仅用于开发角度.. 对于生产添加适当的 mime 类型。
2021-05-02 14:01:20
截至目前,此标志不再用于禁用 MIME 类型检查
2021-05-10 14:01:20

对于 Windows 用户:

如果此问题发生在您的自托管服务器(例如:您的自定义 CDN)上,并且浏览器 (Chrome)... ('text/plain') is not executable ...在尝试加载您的 javascript 文件时会说类似的话......

这是你需要做的:

  1. 打开注册表编辑器 Win + R > regedit
  2. 前往 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.js
  3. 检查如果内容类型是application/javascript或不是
  4. 如果不是,则将其更改为application/javascript并重试
它不在那里,我已经创建了它并重新启动,但唉,同样的错误。编辑:我是为 pgadmin4 做的,在他们建议的 faq pgadmin.org/faq 中找到了text/javascript
2021-05-04 14:01:20

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

phpvar.js文件里面用这个.htaccess

<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(but php)文件中添加标题行来修复它

<?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这是一个安全原因。但是 apache 不会执行 php 就htaccess命令模拟而言,这是必要的。所以我们需要Content-Type用php函数覆盖apache的头文件header()我猜当 php 发送它而不是之前的 apache 时,apache 停止发送它自己的标头。