12

更新:这适用于 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>

我要尝试的东西不多了...在此先感谢您的帮助。

4

4 回答 4

22

就我而言,添加标头的是防伪令牌。在 Application_Start 中添加它会阻止它添加它:

AntiForgeryConfig.SuppressXFrameOptionsHeader = true;

然后我在 web.config 中添加了 X-Frame-Options,因为我需要整个站点都在 IFrame 中。

于 2014-06-05T08:58:24.163 回答
1

结果 MVC4 自己添加了标头(不请自来)。解决此问题的唯一方法是显式删除标题。

Response.Headers.Remove("X-Frame-Options");

可能有一种方法可以说服 MVC4 不要这样做,但它并没有在我的谷歌查询中提供服务。

于 2014-03-05T04:32:34.477 回答
1

Mike the Tike 的答案的一些进一步细节,这被添加到 global.asax.cs 中的 application_start 方法中,您需要使用指令 system.web.helpers

于 2014-08-28T09:09:49.770 回答
0

IIS 可能会在您的之后添加第二个标头(您可以通过在 Chrome 中按 F12 来查看开发者工具,尝试加载页面,然后单击网络,然后右键单击失败的页面以复制响应标头以查看)。

要阻止 IIS 添加标头:

  • 运行 IIS 管理器
  • 选择您的网站
  • 双击应用程序的 HTTP 响应标头(或在旧 IIS 上,右键单击网站,单击属性,然后单击 HTTP 标头)
  • 然后您可以覆盖或删除额外的标题
于 2014-03-05T01:36:52.877 回答