iframe 拒绝显示
Posted
技术标签:
【中文标题】iframe 拒绝显示【英文标题】:iframe refuses to display 【发布时间】:2015-11-03 20:13:43 【问题描述】:我正在尝试将一个简单的 iframe 加载到我的一个网页中,但它没有显示。我在 Chrome 中收到此错误:
Refused to display 'https://cw.na1.hgncloud.com/crossmatch/index.do' in a frame because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' https://cw.na1.hgncloud.com".
Invalid 'X-Frame-Options' header encountered when loading 'https://cw.na1.hgncloud.com/crossmatch/index.do': 'ALLOW-FROM https://cw.na1.hgncloud.com' is not a recognized directive. The header will be ignored.
这是我的 iframe 的代码:
<p><iframe src="https://cw.na1.hgncloud.com/crossmatch/" frameborder="0"></iframe></p>
我不太确定这意味着什么。我之前加载了很多 iframe,从来没有收到过这样的错误。
有什么想法吗?
【问题讨论】:
【参考方案1】:这意味着cw.na1.hgncloud.com
的 http 服务器发送一些 http 标头来告诉 Chrome 等网络浏览器允许 iframe 仅从托管在同一域 (cw.na1.hgncloud) 上的页面加载该页面 (https://cw.na1.hgncloud.com/crossmatch/) .com):
Content-Security-Policy: frame-ancestors 'self' https://cw.na1.hgncloud.com
X-Frame-Options: ALLOW-FROM https://cw.na1.hgncloud.com
您应该阅读:
https://developer.mozilla.org/en-US/docs/Web/Security/CSP https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy【讨论】:
src
中使用的资源是否应该发送iframe
的属性Content-Security-Policy
?
ALLOW-FROM
in used with X-Frame-Options
现在根据 Mozilla 指南 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… 已过时。如上所述,您应该更喜欢Content-Security-Policy
。【参考方案2】:
错误的原因是https://cw.na1.hgncloud.com 的主机服务器提供了一些 HTTP 标头来保护文档。其中之一是框架祖先必须来自与原始内容相同的域。您似乎试图将 iframe 放在与 iframe 内容不同的域位置 - 因此违反了主机设置的内容安全策略。
查看Content Security Policy 上的此链接了解更多详情。
【讨论】:
【参考方案3】:对于任何为 IFRAME 回调到同一服务器的任何人,请在 IFRAME 页面中传递这个简单的标头:
Content-Security-Policy: frame-ancestors 'self'
或者,将其添加到您的 Web 服务器的 CSP 配置中。
【讨论】:
【参考方案4】:我也遇到了同样的问题,只是不要在私人窗口中打开页面。
【讨论】:
以上是关于iframe 拒绝显示的主要内容,如果未能解决你的问题,请参考以下文章
仅在 Chrome 中出现 2 个深度 iFrame 的“拒绝框架”错误
如果 iframe src 无法加载,则捕获错误。错误:-“拒绝在框架中显示 'http://www.google.co.in/'..”
自定义搜索引擎拒绝在框架中的iframe中显示,因为它将“X-Frame-Options”设置为“sameorigin”
Django 拒绝在 iframe 中显示 YouTube 视频,因为它将“X-Frame-Options”设置为“SAMEORIGIN”