【发布时间】: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