Chrome 和 IE 中的混合内容

Posted

技术标签:

【中文标题】Chrome 和 IE 中的混合内容【英文标题】:Mixed content in Chrome and IE 【发布时间】:2014-11-26 12:14:50 【问题描述】:

在我启用 HTTPS 的网站中,我添加了一个 iframe,它应该显示来自我的其他网站的内容,但它在 https 下不起作用。

<iframe  src="//myothersite.com"></iframe>

在 Firefox 最新版本中一切正常。

在 Chrome 中,iframe 未加载,在控制台中我看到这两个错误

Mixed Content: The page at 'https://mysite' was loaded over HTTPS, but requested an insecure resource 'http://myothersite.com'. 
This request has been blocked; the content must be served over HTTPS.
Failed to load resource: net::ERR_CACHE_MISS

在 IE 内容加载不正确并且我看到一条警告消息;如果我点击允许不安全内容,它会正确加载。

问题是:我如何才能像在 Firefox 中那样使用 IE 和 Chrome(加载混合内容而没有任何警报)?

注意:我没有更改任何浏览器设置。

【问题讨论】:

【参考方案1】:

实际上 Firefox 也开始这样做了:How to fix a website with blocked mixed content

这是有道理的。如果用户使用 HTTPS 访问站点时期望获得安全体验,并且他可能不知道在不安全的连接下加载的应用程序的某些部分。这就是浏览器阻止这种不一致的原因。

您需要在 myothersite.com 上提供 HTTPS。

【讨论】:

好的,如果 myothersite.com 不是我的网站,这很有意义。但是 myothersite.com 是我的网站,我可以保证安全。我认为浏览器应该提供这样的功能 您不能保证任何事情。如果连接不安全,中间的任何人都可以窃听连接。 IFRAME 就像另一个浏览器选项卡,它们使用自己的连接,在这种情况下是不安全的。 我同意,但为什么 firefox 允许在没有任何警报的情况下使用不安全? Firefox 的错误。在我提供的链接中,它说它正在阻止来自 v23 的混合内容。【参考方案2】:

显然最好不要混合内容以防止 MITM 攻击,但对于那些无法控制 url 的人来说,这应该可以解决问题:

src="http://linkToUrl.com" 更改为

src="//linkToUrl.com/script.js"

【讨论】:

这并不能解决script.js发送子http请求的问题。添加此&lt;meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"&gt; 结合使用 src="//linkToUrl.com/script.js" 并添加建议的元标记 @towry 在这里为我解决了这个问题。我相信这是最好的答案。 我必须在哪里配置这个东西? 拯救我的一天@JisuKim82【参考方案3】:

enter image description here

当我设置网址时: &lt;a href="http://127.0.0.1:8080/download/1.txt"&gt;&lt;/a&gt; 来自 https 请求,它报告错误: 混合内容:'https://127.0.0.1/index.html' 的页面通过 HTTPS 加载,但请求了不安全的资源 'http://127.0.0.1:8080/download/1.txt'

This request has been blocked; the content must be served over HTTPS.
Failed to load resource: net::ERR_CACHE_MISS

当我将target="_blank" 添加到网址:&lt;a target="_blank" href="http://127.0.0.1:8080/download/1.txt"&gt; 时,它起作用了! , 有用! 众所周知,target="_blank" 表示在新窗口或标签页或新请求中打开链接的文档!

【讨论】:

这是在 iframe 中!【参考方案4】:

很抱歉,这不像其他答案那样技术性强,但是我在像这样链接 jsquery 时遇到了同样的问题,对我来说,只需将 http:// 更改为 https:// 即可解决。它可能不起作用,但它对我有用,它可能对你有用。

【讨论】:

【参考方案5】:

问题是混合内容,浏览器不允许我们这样做。

您需要更改网址:

http://example.com

//example.com

【讨论】:

这仅在 example.com 设置为接受 HTTPS 请求时有效。这与将其从 http://example.com 更改为 https://example.com 几乎相同。如果一个失败,他们都会失败。【参考方案6】:

我在使用 CloudFlare 时遇到了其他问题,它不会加载,因为文件已缓存为 http。只需转到 CloudFlare 并在缓存选项卡中“清除所有内容”,或者打开“开发模式”。

【讨论】:

【参考方案7】:

将此代码放入您的 html 文件将解决 Chrome 的这两个错误:

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

如果任何解决方案不起作用,请尝试此解决方案。

【讨论】:

以上是关于Chrome 和 IE 中的混合内容的主要内容,如果未能解决你的问题,请参考以下文章

由于背景图像而避免 IE 中的“混合内容”警告的具体规则是啥?

在动态 iframe 中注入表单时 IE 中的混合内容问题

[完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器

chrome中的Chrome css3混合混合模式错误

python的selenium自动化打开chrome后自动和手工混合操作?

IE 和 Chrome/Mozilla 中的 Img 大小不同