繁体   English   中英

禁用 Chrome 严格的 MIME 类型检查

[英]Disable Chrome strict MIME type checking

有什么方法可以在 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

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

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

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

就我而言,我关闭了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>

对于 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

也有过同样的问题,

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

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

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

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

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

如果您使用的是node.js(带有 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"

这应该有效👌🏽

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM