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请求的问题。添加此<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
。
结合使用 src="//linkToUrl.com/script.js" 并添加建议的元标记 @towry 在这里为我解决了这个问题。我相信这是最好的答案。
我必须在哪里配置这个东西?
拯救我的一天@JisuKim82【参考方案3】:
enter image description here
当我设置网址时:
<a href="http://127.0.0.1:8080/download/1.txt"></a>
来自 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"
添加到网址:<a target="_blank" href="http://127.0.0.1:8080/download/1.txt">
时,它起作用了! , 有用!
众所周知,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 中的“混合内容”警告的具体规则是啥?
[完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器