我建议将URL方案预先添加到您的域中 Content-Security-Policy 头。您最终可能需要两次指定域以覆盖两者 http 和 https ,但似乎确实解决了这个问题。
Content-Security-Policy
http
https
我遇到了类似的问题;如果父页面是普通的 http 并且iframed页面提供了包含父域的CSP标题但没有URL方案,Firefox和Chrome都会给出您引用的错误。
我发现为什么会发生这种情况的最大线索是在Pale Moon(Firefox fork)发行说明中:
26.5.0(2016-09-28)修正/变更: 实施了破解CSP(内容安全策略)规范的变更;当通过http加载带有CSP的页面时,Pale Moon现在解释CSP 指令还包括CSP中列出的主机的https版本 如果未明确列出方案(http / https)。这打破了CSP 1.0更具限制性,不允许这种跨协议访问,但与CSP 2一致,允许这样做。
26.5.0(2016-09-28)修正/变更:
实施了破解CSP(内容安全策略)规范的变更;当通过http加载带有CSP的页面时,Pale Moon现在解释CSP 指令还包括CSP中列出的主机的https版本 如果未明确列出方案(http / https)。这打破了CSP 1.0更具限制性,不允许这种跨协议访问,但与CSP 2一致,允许这样做。
https://www.palemoon.org/releasenotes-archived.shtml
但是,Pale Moon 26.5.0似乎仍然与Firefox和Chrome类似。
Scott Helme也在博客上写了一篇关于 类似的问题 使用Safari,但听起来现在已经解决了。
另外需要注意的是框架页面是否也有用 X-Frame-Options 头。我相信Firefox和Safari是唯一同时支持此标头和CSP的浏览器 frame-ancestors 标题,当然在Firefox的情况下 X-Frame-Options 确实看起来优先。与 X-Frame-Options ALLOW-FROM 您只能指定一个URI,因此您可能需要根据需要查看不同浏览器的标题。
X-Frame-Options
frame-ancestors
X-Frame-Options ALLOW-FROM