2016-01-27 129 views
1

我想嵌入一个iframe(包含shellinabox,如果这是相关的)到HTTPS网页上。我使用嵌入的iframe的HTML是非常简单的:iframe被屏蔽为不安全的内容,即使iframe是HTTPS

<div class="jumbotron" style="min-height: 400px;"> 

    <iframe src="https://example.com/shellinabox" style="border:none; min-height: 400px;" width="100%"></iframe> 
</div> 

然而,Chrome会阻止加载的iframe,因为它是“不安全的内容,”我必须手动解锁为它工作。在Chrome控制台报告一个错误这样的:

Mixed Content: The page at 'https://example.com/mainpage/' was loaded over HTTPS, but requested an insecure resource 'http://example.com/shellinabox/'. This request has been blocked; the content must be served over HTTPS. 

我为此感到困惑,因为我清楚的HTML代码是嵌入example.com/shellinabox HTTPS版本。此外,当我直接访问https://example.com/shellinabox时,锁定图标变为绿色,没有任何内容被阻止,并且该页面上没有任何SSL问题的迹象。我也在Firefox,IE和MS边缘测试过它们,它们都有相同的行为(所以它不是特定于Chrome的问题)。是什么赋予了?

+0

https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content – Tom

回答

2

您的代码通过https加载页面,但该页面可能试图通过http加载其他脚本或资产。或者它可能在页面上有通过http发出ajax请求的脚本。您必须检查该页面并查看开发人员控制台,以确切了解不安全的请求。这可能不是您如何创建iframe元素的问题。

+0

如果我在嵌入的页面上打开开发者控制台,那么显示的唯一错误是'拒绝设置不安全的标题“Content-Length”'。 – tlng05

+0

@ tlng05 - 您是否尝试在直接浏览https://example.com/shellinabox后打开开发控制台?然后在网络部分,您应该能够看到它尝试加载的所有资源(安全或不安全)。 – david

1

这是一个老问题,但我遇到了同样的问题。我的用例与你的用例略有不同,但希望这有助于。

对我来说,我的python flask服务器上的路由以“/”字符结尾。在我的iframe中,我在src结尾调用了没有斜杠的路由,并且看到了同样的错误。给iframe中的src添加一个斜杠对我来说是个诀窍。

<iframe src="https://example.com/shellinabox/" style="border:none; min-height: 400px;" width="100%"></iframe> 

我不完全确定为什么在src属性结束时丢失的斜线会导致此错误。如果有人能解释为什么,我会很乐意更新我的答案。

+0

谢谢,在IIS/ASP.NET应用程序中遇到同样的问题。在检查标题后,我看到在重定向链中有一个https - > http重定向(在文件夹上的请求附加了“/”的重定向)。 – Guillaume86