禁用Chrome严格MIME类型检查

时间:2016-08-30 13:19:15

标签: javascript jquery angularjs google-chrome

有没有办法在Chrome中停用var myElement = this.shadowRoot.querySelector('#myElement'); var div = myElement.shadowRoot.querySelector('div');

实际上我正在跨域提出JSONP请求。它在Firefox上运行良好但是,使用chrome时它在控制台中给出了一些错误。

  

拒绝执行来自' https://example.com'的脚本因为它的MIME类型(' text / plain')不可执行,并且启用了严格的MIME类型检查。

它在Mozilla中完美运行..问题仅出现在chrome中

以下是请求的响应标题..

strict MIME type checking

解决方法我认为: 将内容类型外部设置为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

6 个答案:

答案 0 :(得分:9)

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

有关详细信息,请参阅this answer! 您也可以have a look a this one解释为什么加载.js text/plain文件无效。

答案 1 :(得分:4)

就我而言,我在X-Content-Type-Options上关闭nginx然后工作正常。但请确保这会略微降低您的安全级别。将暂时解决。

# 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>

答案 2 :(得分:0)

也有同样的问题,

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

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

将打开开发人员会话Chrome浏览器,您现在可以在新的Chrome浏览器上启动您的应用 我希望这应该有用

答案 3 :(得分:0)

对于Windows用户:

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

这是您需要做的:

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

答案 4 :(得分:0)

如果您使用的是 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"

那应该起作用??

答案 5 :(得分:-2)

文件假装另一个扩展名

时的另一种解决方案

我在php文件的var.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中定义的htaccess。这是一个安全原因。但是,只要Content-Type命令模仿,apache就不会执行php,这是必要的。因此我们需要使用php函数header()覆盖apache的LSD.test标头。我想apache会在php发送它而不是apache之前停止发送自己的头文件。