【问题标题】:Why is IE8 incorrectly complaining about loading non-secure elements?为什么 IE8 错误地抱怨加载非安全元素?
【发布时间】:2011-10-16 17:38:46
【问题描述】:

我管理一个在 SSL 下运行的电子商务网站。

问题出现在我的网站购物车的最后一页上,该页面在 SSL 下加载。问题是 Internet Explorer 8.0(包括版本 8.0.6001.18702 和其他版本的 IE8,但据报道并非所有版本的 IE8)抱怨至少有一个不安全的元素加载,这吓跑了一些我的潜在客户。页面显然完全加载(似乎没有丢失图像)后,IE8 会显示一个对话框,上面写着:

“安全警告:您是否只想查看 安全交付?此网页包含不会传送的内容 使用安全的 HTTPS 连接,这可能会危及 整个网页。 (是/否)”

我试图追踪所有可能通过 HTTP 加载的无效图像和链接,但无济于事。 Firebug Lite 没有显示任何不安全的内容。我开始认为这可能是 IE8 中的一个错误,已在 IE9 中得到纠正,它不会抱怨。

重现此错误Click here using IE8 (or Chrome) 将商品添加到您的购物车。在结果页面上,单击右侧显示“继续安全结帐”的绿色按钮。您会注意到您从 IE8 中看到了上述“安全警告”。

问题:如何确定浏览器尝试不安全地加载哪些内容,或者如何禁止显示“警告”消息?

更新:似乎“安全警告”是由于此页面上暂停 JavaScript 执行所致。但同样的问题仍然存在。如何抑制或“调试”“安全警告”消息?

【问题讨论】:

  • 对于任何感兴趣的人,我正在与他合作。我们已经尝试过使用带有过滤器来显示 HTTP 流量的 wireshark。 Wireshar 显示单个 HTTP 事务,但我无法确定元素的路径。附带的问题是:如何配置 WireShark 以显示 HTTP 元素的路径?
  • 仅供参考——Chrome 也抱怨该页面(因此不仅是 IE8),但我无法让 Chrome 准确揭示作为未加密数据访问的内容。
  • 我刚用chrome试了一下,没有报错。
  • 在 Chrome 上加载 jQuery 并运行以下 sn-p,它返回空:var list=[];$('[src]').each(function(){if($(this).attr('src').match('http:')){list.push(this)}});clear();console.log(list)
  • Soren,当您看到警告时,您使用的是哪个版本的 Chrome?你安装了什么版本的 JavaScript?

标签: javascript google-chrome ssl internet-explorer-8 firebug


【解决方案1】:

如果 Wireshark 用于调试基于标准 Web 浏览器的应用程序,它通常是纯粹的矫枉过正,因为它提供了许多信息的途径,而这些信息通常不需要准确地查明问题。在这种情况下,更好的解决方案是使用Fiddler,它是一个简单但非常强大的调试代理,除了许多有用的功能外,它还能够清楚地区分 SSL 和非 SSL 流量。

它还能够模拟“中间人”测试环境,从而有效地破译 SSL 流量。当然,生成的“on the fly”证书在所有浏览器中都明确标记为不受信任,以防止滥用它。

编辑:我按照给定的说明来引发问题,但我对 IE8 中的任何类型的安全警告都没有问题。 Fiddler 还显示所有资源都是通过 SSL 加载的。

【讨论】:

  • Holodoc,你用的是什么版本的IE8?为了响应您的发现,我编辑了原始帖子以记录出现问题的 IE8 的版本号。非常感谢。
  • 我用 Fiddler2 进行了分析,我的 IE (8.0.6001.18702) 阻塞了跟踪像素 (ping.chartbeat.net),尽管它似乎是 https。
  • Pumbaa,我想也许你找到了答案,所以我注释掉了 Chartbeat 代码作为测试,但问题并没有消失。即使从页面中删除 Chartbeat 代码,我仍然会看到“安全警告”消息。
  • 所以您自己可以看到问题仍然存在,我现在已经注释掉了 Chartbeat 代码,如果您查看源代码并向下滚动到第 526 行,您可以看到。
  • 嗯,对。我假设因为在我点击警告对话框之前没有发送请求。但是,这似乎与暂停的 JS 执行有关,而不是与某个请求有关。
【解决方案2】:

我知道这是一篇旧帖子,但由于没有发布解决我类似情况的答案,我想我会分享我发现的内容,以防其他人偶然发现此页面。如果您使用removeChild() 删除包含设置背景图像的内联样式的 HTML 元素,则在旧版本的 IE8 中会出现警告。您可以通过将设置背景图像的内联样式移动到 HTML 头部或外部样式表中设置的样式类来消除警告。

请参阅this Microsoft KB Page,它说该故障仅发生在 IE6 和 IE7 中,但我在 XP 上的 IE8 上也发生了这种情况,并且相同的修复方法有效。

【讨论】:

  • 我也有这个警告......只有当我从另一个窗口中删除之前由 JavaScript 插入的 DOM 元素时才会出现警告。感谢您的提示。
  • 这是我修复它的代码:jQuery('[background]').removeAttr('background');该页面提供了一些背景:blog.httpwatch.com/2009/04/23/…
  • 请参阅下面的答案,了解实施此修复的简单方法。
【解决方案3】:

我过去在 IE8 中遇到过类似的问题,似乎是缓存项目的问题。我无法完全确定它,因为和你一样,我检查了每一个资产,没有发现不是通过 SSL 加载的。但是,我注意到如果我阻止所有缓存并强制 IE 从服务器加载所有资产,警告就会消失。

我不知道是否存在从缓存中提取的某些项目没有被识别为安全的错误,但似乎与此有关。

禁用缓存显然是解决仅影响浏览器子集的问题的不好方法,但它可能是一个提示,可以引导您朝着正确的方向前进。

【讨论】:

    【解决方案4】:

    点击页面顶部的结帐?

    不再在 https 中了吗?

    【讨论】:

    • 如果您指的是面包屑中的“结帐”链接,您是对的,但这似乎与原始帖子中描述的问题的原因无关。
    【解决方案5】:

    如果您有支持 SSL 的页面,那么每个资产(js、css、图像)也应该由 HTTPS 协议提供服务。 90% 的浏览器都是一样的行为

    【讨论】:

    • 我们已经知道了。我们无法确定导致错误出现的页面元素是什么。根据我们的测试,它只发生在 IE8
    【解决方案6】:

    正如乔恩所说:

    如果您使用removeChild() 删除包含设置背景图像的内联样式的 HTML 元素,则在旧版本的 IE8 中会出现警告。您可以通过将设置背景图像的内联样式移动到 HTML 头部或外部样式表中设置的样式类来消除警告。

    虽然Microsoft KB Page 确实提供了修复,但最好的解决方案是按如下方式实现它(放置在页面底部的脚本中):

    Ext.removeNode = Ext.isIE ? function(){
        return function(n){
            if(n && n.tagName != 'BODY'){
                n.outerHTML = "";
            }
        }
    }() : function(n){
        if(n && n.parentNode && n.tagName != 'BODY'){
            n.parentNode.removeChild(n);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 2020-08-12
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多