【问题标题】:iframe correctly loads a webpage in some browsers but not others (insecure content error)iframe 在某些浏览器中正确加载网页,但在其他浏览器中无法正确加载(不安全的内容错误)
【发布时间】:2020-11-19 23:20:20
【问题描述】:

我有一个 https 网站,它试图在 iframe 中显示外部 https 网页。

在桌面版 Chrome 和 Firefox 上,它可以正常加载。

在桌面/移动版 Safari 和 iOS 版移动版 Chrome 上,它不会加载任何内容。

在 Safari 中我看到错误:

The page at about:blank was not allowed to display insecure content from http://example.com

虽然 iframe 加载的网页是 https,但它似乎正在尝试加载一些 http 内容,并阻止 iframe 加载任何内容。

我真的很难过,因为它适用于某些浏览器,但不适用于其他浏览器。这是我运行的浏览器测试。

Desktop Chrome: Success
Desktop Firefox: Success
Desktop Safari: Fail
iOS Mobile Safari: Fail
iOS Mobile Chrome: Fail
Android Mobile Chrome: Success

以前有没有人遇到过这个错误并且知道如何解决它?为什么它在某些浏览器中有效,而在其他浏览器中无效?我正在努力使用 iframe 实现跨浏览器兼容性。任何有关黑客或解决方法的建议将不胜感激。

更新: 在查看网络选项卡后。我看到它正在请求一个 HTTPS 网址,但该位置是一个 HTTP 网址。一些浏览器对此没有问题并显示内容。其他浏览器似乎阻止了它。即使位置 url 显示 http,请求 url 实际上确实打开了一个 https 网站。

【问题讨论】:

  • http://example.com 是实际的错误消息吗? iFrame 试图从http://example.com 加载什么?另外,当您打开开发工具时,Chrome 版本在检查network 选项卡时是否也会尝试从http://example.com 加载内容
  • 不,实际网站的 url 不同。我改为“示例”,因为它不重要。但是查看网络选项卡确实提供了一些见解。看看这个截图。 i.imgur.com/221PdYP.png 显然,它正在请求一个 HTTPS url,但该位置是一个 HTTP url。 Chrome 和 Firefox 可以,但其他浏览器不行。知道这是为什么吗?值得一提的是,如果您打开请求 url,它实际上会打开一个 HTTPS 站点。
  • 它看起来像一个重定向。 302 (Object Moved) 的 HTTP 响应强制浏览器加载 Location 标头中列出的 HTTP 站点。查看网络选项卡,看起来第一个链接在到达正确的200 响应代码之前重定向了 3 次。如果您有权访问调用第一个 URL 的任何内容,则可能将其更改为仅调用最终 URL。
  • 不幸的是,我无法访问这些 URL。你知道为什么有些浏览器可以在 iframe 中显示网站,但其他浏览器会阻止它吗?
  • 尝试将referrerpolicy 属性设置为no-referrer<iframe referrerpolicy="no-referrer" src="...">

标签: iframe https content-security-policy


【解决方案1】:

问题是混合内容,即当您加载 HTTP 和 HTTPS 内容时。

您必须问自己的第一个问题是大多数开发人员未能做到的:这值得做吗?

假设您必须发挥创造力。您基本上必须让您的iframe 从您自己的站点加载一个页面,并让 加载非 HTTPS 页面。 意味着必须扫描 HTML/XML 属性,例如 src 并重建它们的 URL(不要忘记 base 元素),以便通过您的网站。

<?php
if (isset($_GET['url']))
{
 $url = $_GET['url'];
 $ch = curl_init();
 $timeout = 5;
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
 $data = curl_exec($ch);
 curl_close($ch);
 echo $data;
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多