【问题标题】:IE7 - meta refresh inside an HTTPS IFRAME causes mixed content warningIE7 - HTTPS IFRAME 内的元刷新导致混合内容警告
【发布时间】:2010-10-17 04:50:23
【问题描述】:

我有一个 ASP.NET 应用程序,它通过使用带有刷新标头(或页面中的元刷新标记)的隐藏 IFRAME 来实现保持活动状态。

对于许多(但不是全部)Internet Explorer 实例(目前已在 IE7 和 IE8 测试版上重现 - 但并非适用于所有人!)如果您在两个都包含此保持活动 IFRAME 的安全页面之间移动,您会得到类似这一系列事件:

0s:加载 page1.html - 包括 keepalive.html,安排在 15s 刷新 5s:点击page2链接 加载 page2.html - 包括 keepalive.html,安排在 20 秒刷新 15s:page1 上的框架刷新;显示混合内容错误框

此时浏览器中显示错误“此页面包含安全和非安全内容”。

page1.html:

<html><head><title>Page 1</title></head><body>
<h1>This is Page 1</h1>
<p><a href="page2.html">Go to Page 2</a></p>
<iframe src="keepalive.html" width="500" height="200" />
</body></html>

第 2 页是相同的,但显示为第 2 页,并链接到第 1 页。

keepalive.html:

<html><head>
<meta http-equiv="refresh" content="15" />
</head><body>
<h2>This is the keep alive</h2>
</body></html>

在我测试过的所有浏览器中,我确保互联网区域有权进行元刷新,并设置为在显示混合内容时提示。我已经阅读了所有建议您需要在 IFRAME 上使用 src="" 标记的页面,否则 IE 会认为它不安全 - 按照设计,它必须具有 src 标记,即保持活动页面的标记。

如果您永远坐在第 1 页上,则 IFRAME 会很好地刷新。该错误仅在您更改到第 2 页后第一次出现。

我正在寻找一种方法来以最小的更改来解决此问题:保持活动状态的更好方法是使用 control & automatically-refreshing images,我将在未来的版本中对其进行研究。我想到的一个可能的解决方法是让 IFRAME 的内容成为服务器的常规 XMLHttpRequest,而不是元刷新。更简单的错误修复会更好。


更新: 我已将 Grant Wagner 的答案标记为正确,因为它导致我遇到实际问题:Lenovo Password Manager 插件 CpwmIEBrowserHelper 会导致此错误。这巧妙地解释了为什么有些人会看到这个问题而不是其他人——我问过的大多数人都有 ThinkPad。禁用扩展程序会使刷新问题消失。

由于我们无法让可能使用该应用程序的每个人都解决此问题,因此我们将使用 javascript 计时器并刷新窗口位置,将 keepalive.html 页面更新为如下所示:

<html><head>
<meta http-equiv="pragma" content="no-cache">
</head><body>
<h2>This is the keep alive</h2>
<script type="text/javascript">

  setTimeout ('ReloadPage()', 15000 );

  function ReloadPage() {
     window.location = window.location;
  }

</script>
</body></html>

【问题讨论】:

    标签: asp.net internet-explorer iframe refresh keep-alive


    【解决方案1】:

    我在 IE 6、7 和 8(发行版)中尝试了您的测试页面,但无法重现该问题。

    需要检查的一些事项:

    • 下载 Fiddler 并验证 META REFRESH 请求的 URL。确保它实际上是https。此外,将查询字符串设置为 keepalive.html 对于页面 1 和 2 是唯一的,这样您就可以验证是哪个请求导致消息框出现。
    • 确保所有受影响的浏览器都在同一安全区域中看到该站点(检查底部的状态栏并确保所有 IE 实例都显示为“Internet”或“本地 Intranet”)。如果一个区域的浏览器可以正常工作,而另一个区域的浏览器不能工作,您可以尝试将它们都放在同一个区域。
    • 在没有任何加载项的情况下启动 Internet Explorer(开始 > 所有程序 > 附件 > 系统工具 > Internet Explorer(无加载项))或(开始 > 运行 > iexplore -extoff)。同样的事情发生在受影响的系统上吗?这个故事与您的具体问题无关,但几年前我有一个用户的会话(由会话 cookie 维护)没有在辅助窗口中存活。事实证明,她下载并安装的一个流行的光标插件阻止了两个不同的 IE 窗口之间的 cookie 共享。故事的重点是 IE 附加组件有时会导致您不会与附加组件相关联的奇怪行为。最好在无插件模式下尝试排除它们。
    • 确保所有计算机都运行相同版本的 Internet Explorer(帮助 > 关于 Internet Explorer 或转到 http://update.microsoft.com/

    坦率地说,我担心问题的性质。您是说访问第 1 页设置了一个计时器来刷新 iframe,然后您离开该页面,并且刷新仍然发生在指定时间,即使您已经离开包含 iframe 的页面,其中包含元刷新。离开第 1 页导航应该会在初始 iframe 刷新时停止计时器。这就是为什么我认为你应该使用 Fiddler(和一个唯一的 keepalive.html 查询字符串)来验证它是来自第 1 页上 iframe 的请求导致了问题。

    【讨论】:

    • 我多次遇到 Fiddler 的问题。尝试加载任一页面时都不会出现错误,它只会在重定向后 15 秒出现。 (感谢关于添加 ?pageX 查询字符串的提示,总的来说是个好主意。)而且 - 附加组件提示让我找到了答案!
    • 您能否详细说明为什么附加组件提示会引导您找到答案?我很好奇。
    • 我在没有加载项的情况下启动了 IE,但问题并未显现。然后,我禁用了一半,然后对剩余的部分进行二进制切碎,直到找到导致问题的那个。
    【解决方案2】:

    尝试使用以 https 开头的完整 URL 设置 iframe,我过去曾遇到过此问题,我认为这是解决方案。

    【讨论】:

    • 已经测试过了。现在在服务器上进行更改 - 没有任何区别。
    猜你喜欢
    • 2016-06-22
    • 1970-01-01
    • 2018-03-19
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多