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

Posted

技术标签:

【中文标题】拒绝执行脚本,启用严格的 MIME 类型检查?【英文标题】:Refused to execute script, strict MIME type checking is enabled? 【发布时间】:2017-03-27 05:30:19 【问题描述】:

为什么我在控制台中收到此错误?

拒绝执行脚本 'https://www.googleapis.com/customsearch/v1?key=API_KEY&q=flower&searchType=image&fileType=jpg&imgSize=small&alt=json' 因为它的 MIME 类型('application/json')是不可执行的,并且 已启用严格的 MIME 类型检查。

【问题讨论】:

【参考方案1】:

您有一个 <script> 元素正在尝试加载一些外部 javascript

你给它的 URL 指向一个 JSON 文件,而不是一个 JavaScript 程序。

服务器正确地报告它是 JSON,因此浏览器正在中止该错误消息,而不是尝试将 JSON 作为 JavaScript 执行(这会引发错误)。


这种情况的根本原因是您尝试发出 Ajax 请求,遇到了 cross origin error 并试图通过告诉 jQuery 您正在使用 JSONP 来修复它。这仅在 URL 提供 JSONP(它是 JavaScript 的不同子集)时才有效,而这个不提供。

带有附加查询字符串参数 callback=the_name_of_your_callback_function 的相同 URL 确实返回 JavaScript。

【讨论】:

我现在已经给出了这个,它修复了错误 type="application/json" — 现在浏览器知道它没有尝试加载 JavaScript,因此它完全忽略了 script 元素。【参考方案2】:

在我的情况下,它是一个未找到的文件,我输入了错误的 javascript 文件的路径。

【讨论】:

同理。不正确的路径会导致一些错误的 html 页面响应,进而导致这个令人困惑的错误消息。 巧妙的回答。谢谢你:)【参考方案3】:

这个结果是谷歌弹出的第一个结果,比这里发生的更广泛。以下内容适用于 express 服务器

我试图从嵌套文件夹访问资源。

index.html里面我有

<script src="./script.js"></script>

静态路由安装在:

app.use(express.static(__dirname));

script.js 位于 嵌套文件夹 中,如:js/myStaticApp/script.js 我只是将静态路由更改为:

app.use(express.static(path.join(__dirname, "js")));

现在可以了:)

【讨论】:

【参考方案4】:

如果您使用的是 Node.js,请尝试使用 express.static()

您只需将保存静态资产的目录名称传递给 express.static 中间件即可开始直接提供文件。例如,如果您将图像、CSS 和 JavaScript 文件保存在名为 public 的目录中,您可以执行以下操作 -

即: app.use(express.static('public'));

这种方法解决了我的问题。

谢谢,

【讨论】:

可能不是这个特定问题的正确答案,但它是我的问题的解决方案。谢谢!【参考方案5】:

搜索了一段时间后,我意识到我的 Windows 10 64 位中的这个错误与 JavaScript 有关。为了看到这一点,请转到您的浏览器 DevTools 并首先确认。在我的情况下,它显示一个错误,如“MIME 类型('application/javascript')不可执行”。

如果是这种情况,我已经找到了解决方案。这是交易:

    借用https://github.com/jupyterlab/jupyterlab/issues/6098上的用户“ilango100”:

不久前我遇到了完全相同的问题。我认为这个问题是特定于 Windows 的。这是由于在 Windows 注册表中为 javascript 文件设置了错误的 MIME 类型。我通过使用正确的内容类型编辑 Windows 注册表解决了这个问题:

regedit -> HKEY_LOCAL_MACHINE\Software\Classes -> 你会看到每个文件扩展名的很多文件夹 -> 只需向下滚动到“.js”注册表并选择它 -> 在右侧,如果“内容类型”值不是应用程序/javascript,那么这就是导致问题的原因。右键单击 Content Type 并将值更改为 application/javascript

enter image description here

在浏览器中重试。”

在那之后,我意识到错误发生了变化。它甚至不再在浏览器中自动打开。但是,PGAdmin 将在侧栏上打开(靠近日历/时钟)。通过尝试直接在浏览器中打开(“New PGAdmin 4 window...”),它也不起作用。

最终解决方案:单击“复制服务器 URL”并将其粘贴到浏览器中。它对我有用!

编辑:可能不需要复制服务器 URL,正如 Eric Mutta 在下面的评论中所解释的那样。

【讨论】:

+1 这对我有用。我在注册表中进行了更改,以使用 application/javascript 作为 .js 扩展名。然后我关闭并重新打开 pgAdmin 并且加载正常(不复制服务器 URL)。我正在运行 Windows 8.1 和 PostgresSQL 13。 你是对的。再次尝试后,它工作正常,没有复制 URL。【参考方案6】:

就我而言,我正在处理遗留代码

我有这行代码

<script type="text/javascript" src="js/i18n.js.php"></script>

我对这应该如何工作感到困惑,这段代码调用的是 PHP 文件而不是 js

尽管它在实时服务器上运行

但我在舞台服务器上出现此错误

内容类型是

content-type: text/html; charset=UTF-8

甚至是 text/javascript 在 script 标签中

在我添加之后

header('Content-Type: text/javascript');

在文件 i18n.js.php

的开头

错误已修复

【讨论】:

非常有用且描述清楚的答案。我遇到了这个问题,按照你的建议解决了。奇怪的是,我正在进行服务器迁移(使用相同的代码但不同的 CentOS、Apache 和 PHP 版本)并且只有旧服务器产生了这个错误,即使 Chrome 控制台在两个服务器调用中都显示“text/html”内容类型。 【参考方案7】:

我不小心将 js 文件命名为 .min 而不是 .min.js ...

【讨论】:

【参考方案8】:

Python 烧瓶

Windows 上,它使用来自注册表的数据,因此如果 HKCR/.js 中的“内容类型”值未设置为正确的 MIME 类型,可能会导致您的问题。

打开 regedit 并转到 HKEY_CLASSES_ROOT 确保键 .js/Content Type 具有值 text/javascript

C:\>reg query HKCR\.js /v "Content Type"

HKEY_CLASSES_ROOT\.js
    Content Type    REG_SZ    text/javascript

【讨论】:

【参考方案9】:

我的网络服务器返回:

Content-Type: application\javascript

我终其一生都无法弄清楚出了什么问题。然后我意识到我的斜线方向错误。应该是:

Content-Type: application/javascript

【讨论】:

【参考方案10】:

我的问题是我一直将 CSS 文件放在脚本定义区域的末尾上方 尝试检查页面中的文件位置

【讨论】:

【参考方案11】:

在我的情况下(React 应用程序),只需强制清理缓存即可。

【讨论】:

【参考方案12】:

在我的例子中,Spring Security 在允许调用外部库之前寻找身份验证。我有一个文件夹 /dist/.. 我已添加到项目中,一旦我将文件夹添加到 WebSecurityConfig 类的忽略列表中,它就可以正常工作了。

web.ignoring().antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/images/**", "/error", "/dist/**");

【讨论】:

【参考方案13】:

在入口html中添加如下所示的代码sn-p。即 reactjs 中的“index.html”

<div id="wrapper"></div>
<base href="/" />

【讨论】:

非常感谢您解释为什么这很有用。【参考方案14】:

如果您有快递路线,例如:

app.get("*", (req, res) => 
  ...
);

尝试将其更改为更具体的内容:

app.get("/", (req, res) => 
  ...
);

例如。

否则您可能会发现自己一遍又一遍地递归地提供相同的 HTML 模板...

【讨论】:

【参考方案15】:

就我而言,我有一个 404 文件的符号链接,但我的 Tomcat 未配置为允许符号链接。

我知道这不太可能是大多数人的原因,但是如果您绝望,请检查这种可能性以防万一。

【讨论】:

【参考方案16】:

我遇到了同样的问题,问题是我的路径中缺少斜杠。

我有

为了解决这个问题,我只需要在 jquery-ui 和 jquery-ui.min 之间添加斜线:

  <script type="text/javascript" src="js/jquery-ui/jquery-ui.min.js"></script>

希望这会有所帮助:D

【讨论】:

【参考方案17】:

我有同样的问题,然后我就这样解决了

change "text/javascript"

type="application/json"

【讨论】:

这会首先阻止浏览器对 URL 的请求,并使 script 元素在文档中的存在完全没有意义。【参考方案18】:

我通过将 $pageContext.request.contextPath 添加到我的 jsp 路径解决了我的问题。 而不是:

 <script    src="static/js/jquery-3.2.1.min.js"></script>

我设置:

 <script    src="$pageContext.request.contextPath/static/js/jquery-3.2.1.min.js"></script>

【讨论】:

以上是关于拒绝执行脚本,启用严格的 MIME 类型检查?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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