禁用 Chrome 严格的 MIME 类型检查

Posted

技术标签:

【中文标题】禁用 Chrome 严格的 MIME 类型检查【英文标题】:Disable Chrome strict MIME type checking 【发布时间】:2017-01-06 19:22:39 【问题描述】:

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

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

解决我的想法: 外部设置 content-type 为application/javascript

【问题讨论】:

你见过类似的问题吗? ***.com/questions/17341122/… @Rory McCrossan 是的......这个问题是指从 github 获取文件......它们是将文件导出为 zip 的替代解决方法...... 您以纯文本形式发送的内容是什么? 它收到一个json..响应是这样的..angular.callbacks._3(json_data) 我错过了你正在发送 JSONP;您需要使用正确的 MIME 类型:application/javascript 【参考方案1】:

node.js 的获取处理程序中将路由名称更改为单个路由 我的app.get('/all-produce/search',(req,res)) 不工作 但我将其更改为 app.get('/getProduce',(req,res)) 和与 html 链接的 CSS 文件。

【讨论】:

【参考方案2】:

如果您使用的是 node.js (with express)

如果你想在 node.js 中提供静态文件,你需要使用一个函数。将以下代码添加到您的 js 文件中:

app.use(express.static("public"));

应用在哪里:

const express = require("express");
const app = express();

然后在您的项目文件夹中创建一个名为 public 的文件夹。 (您可以将其称为其他名称,这只是一种好习惯,但请记住也要从函数中更改它。)

然后在此文件中创建另一个名为 css 的文件夹(和/或 css 下的图像文件,如果您也想提供静态图像。)然后将您的 css 文件添加到此文件夹。

添加它们后,相应地更改样式表。例如,如果是:

href="cssFileName.css"

src="imgName.png"

制作它们:

href="css/cssFileName.css"
src="css/images/imgName.png"

应该可以的??

【讨论】:

【参考方案3】:

对于 Windows 用户:

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

这是你需要做的:

    打开注册表编辑器 Win + R > regedit 前往HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.js 检查内容类型是否为application/javascript 如果不是,则将其更改为application/javascript,然后重试

【讨论】:

它不存在,我已经创建它并重新启动,但唉,同样的错误。编辑:我是为 pgadmin4 做的在常见问题解答中找到它pgadmin.org/faq 他们建议text/javascript【参考方案4】:

就我而言,我在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>

【讨论】:

这个解决方案对我来说很好 #Header set X-Content-Type-Options nosniff 当然,降低您网站的安全性,而不是解决实际问题!见:***.com/questions/18337630/…【参考方案5】:

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

我在var.js 文件中使用php 和这个.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 类型警告时,我通过在 .js(but php) 文件中添加 Content-Type 标题行来修复它。

<?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命令模拟,这是必要的。所以我们需要用php函数header()覆盖apache的Content-Type header。我猜想当 php 之前发送它而不是 apache 时,apache 会停止发送自己的 header。

【讨论】:

【参考方案6】:

也遇到过同样的问题,

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

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

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

【讨论】:

同意.. 但仅用于开发角度.. 为生产添加适当的 mime 类型。 自此日期起,此标志不再用于禁用 MIME 类型检查 也不适合我...【参考方案7】:

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

详情请见this answer! 您也可以have a look a this one,因为它解释了为什么使用text/plain 加载.js 文件不起作用。

【讨论】:

以上是关于禁用 Chrome 严格的 MIME 类型检查的主要内容,如果未能解决你的问题,请参考以下文章

拒绝执行脚本,因为 MIME 类型 ('text/html') 不可执行,并且启用了严格的 MIME 类型检查

拒绝执行脚本,因为它的 MIME 类型 ('text/html') 不可执行,并且启用了严格的 MIME 类型检查

拒绝执行脚本,因为它的 MIME 类型 ('text/html') 不可执行并且启用了严格的 MIME 类型检查

拒绝执行脚本,启用严格的 MIME 类型检查?

拒绝从 '*' 执行脚本,因为它的 MIME 类型 ('application/json') 不可执行,并且启用了严格的 MIME 类型检查

加载模块脚本失败:服务器以非 JavaScript MIME 类型“”响应。执行严格的 MIME 类型检查