具有冲突值的多个“X-Frame-Options”标头
Posted
技术标签:
【中文标题】具有冲突值的多个“X-Frame-Options”标头【英文标题】:Multiple 'X-Frame-Options' headers with conflicting values 【发布时间】:2014-04-06 14:23:09 【问题描述】:更新:这适用于 IE,但 Chrome 仍会抛出此错误。 我正在尝试通过我拥有的另一个网站对我拥有的网站进行 i-frame。这是我在 Chrome 上的 JS 控制台中收到的错误消息:
Multiple 'X-Frame-Options' headers with conflicting values ('AllowAll, SAMEORIGIN, AllowAll') encountered when loading 'http://subdomain.mysite.com:8080/Dir/'. Falling back to 'DENY'.
Refused to display 'http://subdomain.mysite.com:8080/Dir/' in a frame because it set 'X-Frame-Options' to 'AllowAll, SAMEORIGIN, AllowAll'.
我没有在任何地方设置这个,我在所有地方都搜索了 SAMEORIGIN。
主站点是 www.mysite.com,另一个站点是 subdomain.mysite.com。显然同源政策阻止我这样做。 因此,我将 subdomain.mysite.com 上的 X-Frame-Options 标头设置为“AllowAll”。在开始请求方法上,我添加了这个:
HttpContext.Current.Response.Headers.Remove("X-Frame-Options");
HttpContext.Current.Response.AddHeader("X-Frame-Options", "AllowAll");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
在页面级别我添加了这个:
<meta name="x-frame-options" content="allowall" />
在 javascript 中我添加了这个:
<script type="text/javascript">
document.domain = "mysite.com";
</script>
我要尝试的东西不多了...在此先感谢您的帮助。
【问题讨论】:
【参考方案1】:在我的例子中,添加标题的是防伪令牌。在 Application_Start 中添加它会阻止它添加它:
AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
然后我添加了the X-Frame-Options in the web.config,因为我需要将整个网站都放在一个 IFrame 中。
【讨论】:
是的,我也是...+1 节省时间 @MiketheTike 我有一个类似的question。我想知道你是否可以看看。【参考方案2】:原来 MVC4 自己添加了标头(不请自来)。解决此问题的唯一方法是显式删除标题。
Response.Headers.Remove("X-Frame-Options");
可能有一种方法可以说服 MVC4 不要这样做,但它在我的大量 Google 查询中没有服务。
【讨论】:
我有一个类似的question。我想知道你是否可以看看。【参考方案3】:Mike the Tike 的回答的更多细节,这被添加到 global.asax.cs 中的 application_start 方法中,您需要使用指令 system.web.helpers
【讨论】:
【参考方案4】:IIS 可能会在您的之后添加第二个标头(您可以通过在 Chrome 中按 F12 来查看开发人员工具,尝试加载页面,然后单击网络,然后右键单击失败的页面以将响应标头复制到看看)。
阻止 IIS 添加标头:
运行 IIS 管理器 选择您的网站 双击应用程序的 HTTP 响应标头(或在旧 IIS 上,右键单击网站,单击属性,然后单击 HTTP 标头) 然后您可以覆盖或删除额外的标头【讨论】:
以上是关于具有冲突值的多个“X-Frame-Options”标头的主要内容,如果未能解决你的问题,请参考以下文章
当站点有多个 X-Frame-Options 标头时,避免默认拒绝