为什么我突然得到一个“阻塞加载混合活动内容”;Firefox的问题?

今天早上,当我将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"`

在其他错误中,由上述两个中的后者未加载引起。

上述问题是什么意思?我该如何解决?

512764 次浏览

我发现这篇博文澄清了一些事情。引用最相关的部分:

混合活动内容现在被默认阻止在Firefox 23!

< p > 什么是混合内容?
当用户访问通过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>

请注意,临时的“修复”是点击地址栏左上角的“屏蔽”图标,并选择“禁用此页面上的保护”,尽管出于明显的原因,建议使用而不是

更新:来自Firefox (Mozilla)支持页面的这个链接在解释混合内容的构成方面也很有用,并且正如上面一段所述,它实际上提供了如何显示页面的细节:

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

如果你需要允许混合内容显示,你可以很容易地做到这一点:

单击地址栏上的屏蔽图标“混合内容屏蔽”,在下拉菜单中选择“禁用本页保护”。

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

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

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

你也可以在你的src中使用https,即使你要将它发布到一个http页面。这将避免评论中提到的潜在问题。

在没有白名单功能的情况下,你必须做出“全部”或“一无所有”的选择。您可以完全禁用混合内容阻塞。


无选择

您需要永久禁用当前活动概要文件的混合内容阻塞。

在“Awesome Bar”中,输入“about:config”。如果这是您的第一次,您将收到“这可能使您的保修无效!”消息。

是的,你要小心。是的,你答应我!

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


所有的选择

iDevelApp的答案非常棒。

如果你的应用服务器是weblogic,那么确保WLProxySSL ON条目存在(也要确保它不应该被注释)在webserver的conf目录下的weblogic.conf文件中。然后重新启动web服务器,它将工作。

我也有同样的问题,因为我买了一个CSS模板,它通过http://whatever.js.com/javascript.js抓取了一个外部javascript文件。我去了我的浏览器中的页面,然后使用SSL将其更改为https://whatever...,它工作,所以在我的HTML javascript标签中,我只是将URL更改为使用https而不是http,它工作。

如果您通过AJAX使用内部服务,请确保url指向https,这为我清除了错误。

初始AJAX URL: "http://XXXXXX.com/Core.svc/" + ApiName
修正的AJAX URL: "https://XXXXXX.com/Core.svc/" + ApiName,

我发现如果你有问题,包括或混合你的页面与http://www.example.com,你可以通过放置/ / www.example.com来解决这个问题

由于安全原因给出了错误。 为此,请在网站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"

在https协议上强制重定向,你也可以在根文件夹的。htaccess中添加这个指令

RewriteEngine on


RewriteCond %{REQUEST_SCHEME} =http


RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

当我的网站从http到https时,我也遇到了同样的问题。我们已经添加了规则,所有请求重定向http到https。

你需要添加站点间请求重定向规则,但你必须删除外部js/css的重定向规则。

将下面的<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">

@Blender Comment是最好的方法。永远不要在代码的任何地方硬编码协议,因为如果你从http移动到https,它将很难改变。因为您需要手动编辑和更新所有文件。

这总是更好的,因为它自动检测协议。

src="//code.jquery.com

在相关页面,使混合内容https到http调用,这是不可访问的,我们可以添加以下条目在相关和摆脱混合内容错误。

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

我只是通过在头部添加以下代码来修复这个问题:

    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

简单地将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>

我已经设法修复这个使用这些:

Firefox用户

  1. 打开一个新选项卡,在地址栏中输入about:config进入配置页面。
  2. 搜索security.mixed_content.block_active_content
  3. TRUE更改为FALSE

Chrome用户

  1. 单击URL旁边的Not Secure Warning

    Not secure warning

  2. 在弹出框中单击Site Settings

    Site Settings

  3. 修改Insecure ContentAllow

    不安全内容

  4. 关闭并刷新页面

@if (env('APP_DEBUG'))
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
@endif

Laravel Blade的语法,请记住仅用于调试以避免MITM攻击和窃听

也使用

http -> https

对于Ajax或普通JS脚本或CSS也将解决这个问题。