.NET MVC Iframe 'X-Frame-Options' to 'SAMEORIGIN' 解决办法

时间:2022-12-13 18:19:26

今天做到两个系统的登录,想使用淘宝的办法,做个Iframe登录框,保持信息一致。


然后出现了Refused to display 'http://xxx.xxx.com' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.


证明此页面不能被Iframe,因为以前处理过此情况(当初走了特别多的弯路)


X-Frame-Options的产生于@Html.AntiForgeryToken(),很多情况下我们的Form都要做Csrf(Cross-site request forgery)的处理,但是一旦使用了@Html.AntiForgeryToken(),页面将不允许Iframe。


X-Frame-Options存在于Response的Header中,很多人和我的想法一样,就是立刻在对应的Action中添加个Response.Headers.Set("X-Frame-Options", "allow-from");


但是实际告诉我们,并没有什么卵用,因为View的解析在Action之后。


所以我们的解决办法是:

                @Html.AntiForgeryToken()
                Response.Headers.Set("X-Frame-Options", "allow-from");

必须在页面的@Html.AntiForgeryToken()之后添加X-Frame-Options,不然无效(AntiForgeryToken方法会再替代一次)


注意:是Response.Headers.Set,不要用成了 Response.AddHeader("X-Frame-Options", "allow-from"); 。一个是set,一个是Add,用错了你会发现有两个X-Frame-Options。(这个注意点是今天造成的- -,纠结了半天)


Thanks,End