为什么我在Firefox浏览器中突然出现“Blocked loading mixed active content”问题?

414
今天早上,我将我的Firefox浏览器从22版本升级到最新的23版本后,我网站后台的一些关键部分停止工作了。
通过查看Firebug日志,发现以下错误被报告:
Blocked loading mixed active content "http://code.jquery.com/ui/1.8.10/themes/smoothness/jquery-ui.css"
Blocked loading mixed active content "http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.min.js"`

上述错误是由于前面的两个错误之一未被加载而引起的。

这句话的意思是什么,我该如何解决?


嘿,我只是通过将"https://www.googl.com/maps" 更改为 "//www.googl.com/maps" 解决了问题。这样做可以使内容不被阻止。 - Ram Balwad
电子商务链接失效(错误-找不到您请求的页面) - Soleil
17个回答

469

我找到了这篇博客文章,解决了一些问题。摘引最相关的部分:

Firefox 23默认阻止混合活动内容(Mixed Active Content)!

什么是混合内容?
当用户访问通过HTTP提供服务的页面时,他们的连接会被窃听和中间人攻击(MITM)。当用户访问通过HTTPS提供服务的页面时,他们与Web服务器的连接经过SSL进行身份验证和加密,从而免受窃听者和MITM攻击。

然而,如果HTTPS页面包含HTTP内容,则攻击者可以读取或修改HTTP部分,即使主页面通过HTTPS提供服务。当HTTPS页面具有HTTP内容时,我们称为“混合”内容。用户正在访问的网页仅部分加密,因为一些内容通过HTTP未加密地检索。混合内容拦截程序在HTTPS页面上阻止某些HTTP请求。

对于我的情况,解决方法很简单,只需确保jquery包含如下内容(请注意删除协议):

<link rel="stylesheet" href="//code.jquery.com/ui/1.8.10/themes/smoothness/jquery-ui.css" type="text/css">
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.min.js"></script>

请注意,临时的“解决方案”是在地址栏左上角点击“盾牌”图标并选择“在此页面上禁用保护”,尽管出于明显的原因不建议这样做。

更新:火狐(Mozilla)支持页面中的此链接也很有用,它解释了什么构成混合内容,并且如上段所述,提供了如何显示该页面的详细信息:

大多数网站将继续正常工作,无需采取任何行动。

如果需要允许显示混合内容,可以轻松实现:

单击地址栏中的混合内容防护盾牌图标,并从下拉菜单中选择“在此页面上禁用保护”。

地址栏中的图标将变为橙色的警告三角形身份验证图标,以提醒您正在显示不安全的内容。

要恢复之前的操作(重新阻止混合内容),只需重新加载页面即可。


85
更好的方法是完全删除协议:src="//code.jquery.com..."。浏览器会使用加载页面时的协议。 - Blender
19
哦,天啊!FF开发团队这次弄巧成拙了——好的点子,但实现起来太不给力了。无法持久化禁用页面,并且没有白名单(用于你信任某个含有混合内容的网站)。 - Raad
9
@Raad,你无法相信一个存在混合内容的网站。虽然网站所有者可能是无辜的,但携带HTTP请求的所有路由器可能并非如此。我建议向网站所有者提交错误报告。 - alpha-mouse
8
@Raad和那些数以百计甚至数以千计的网站正在公开暴露可能包含个人身份信息的标头,这些信息原本应该被SSL连接加密...坦率地说,在这件事情上我没有看到FF Dev团队是不负责任的实体... - Assimilater
3
当阻止完全无害的操作时,非常令人沮丧。说到压缩文件!我有一个插件,使用Ziptastic查找您在地址表单中输入的邮政编码的城市和州。但是这个插件被损坏了:我只想使用restful API来获取一个很小的JSON对象——没有成功。这就像浏览器安全方面的TSA(美国国家安全局运输安全管理局)!给我们的裤子回来吧,拜托了! - Chris Baker
显示剩余8条评论

159

这意味着您从https调用http。您可以在脚本标签中使用src="//url.to/script.js",它将自动检测。

或者,即使您将其发布到http页面,也可以在src中使用https。这将避免评论中提到的潜在问题。


1
只是一句话注意,如果用于本地存储的网页上,它可能会导致浏览器徒劳地搜索脚本,从而显著延迟页面的加载。 - binaryfunt

62

没有白名单功能,你必须做出“全部”或“无”的选择。你可以完全禁用混合内容阻止。


无选择

你需要永久地禁用混合内容阻止功能,针对当前使用的配置文件。

在“地址栏”中输入“about:config”。如果这是你第一次使用,你将看到“这可能会使您失去保修!”的提示信息。

是的,你会小心的。是的,你承诺!

找到security.mixed_content.block_active_content。将其值设置为false


全部选择

iDevelApp的回答很棒。


1
你知道如何在Chrome上启用混合内容吗? - Faizan
1
@Faizan:从这个答案中得知:“在地址栏的右端应该有一个‘盾牌’图标,您可以单击它来运行不安全的内容。” - fuglede

43
将以下<meta>标签放入文档的<head>部分,以强制浏览器将不安全的连接(HTTP)替换为安全的连接(HTTPS)。如果连接能够使用HTTPS,则可以解决混合内容问题。
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

如果你想要阻止某些内容,那么请将以下标签添加到<head>标签中:
<meta http-equiv="Content-Security-Policy" content="block-all-mixed-content">

1
在Chrome中无法工作?在Firefox中工作过。upgrade-insecure-requests似乎可以将http调用升级为https。 - Aniket Thakur
2
这是个坏主意吗?难道安全策略的存在没有理由吗? - medley56

16

因为安全原因出现了错误。 请在网站URL中使用 "https" 而不是 "http"。

例如:

   "https://code.jquery.com/ui/1.8.10/themes/smoothness/jquery-ui.css"
   "https://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.min.js"

15
在相关页面中,存在一个混合内容的https到http的调用,该调用是无法访问的。我们可以在相关位置添加以下条目,以解决混合内容错误。
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

13

12

仅仅将 HTTP 改为 HTTPS 就解决了我的问题。

错误:

<script src="http://code.jquery.com/jquery-3.5.1.js"></script>

正确:

<script src="https://code.jquery.com/jquery-3.5.1.js"></script>

7

我已经使用以下方法解决了这个问题:

对于 Firefox 用户

  1. 在地址栏中输入 about:config 进入配置页面。
  2. 搜索 security.mixed_content.block_active_content
  3. TRUE 改为 FALSE

对于 Chrome 用户

  1. 点击 URL 旁边的 未安全提示

    Not secure warning

  2. 点击弹出框上的 站点设置

    Site Settings

  3. 不安全内容 改为 允许

    Insecure Content

  4. 关闭并刷新页面


这是一个非常糟糕的解决方案,你最终会部署出故障的生产项目。 - Oliver Dixon

5

我曾经遇到过同样的问题,因为我购买了一个CSS模板,并通过 http://whatever.js.com/javascript.js 引入了外部javascript文件。我在浏览器中打开该页面,然后使用SSL将其更改为 https://whatever...,结果它就起作用了。所以在我的HTML javascript标签中,我只需更改URL以使用 https 而不是 http,然后它就可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接