"this content cannot be viewed in a frame" 第一次加载页面时出错
"this content cannot be viewed in a frame" error the first time I load the page
我开发了一个搜索表单,该表单托管在我公司的本地服务器(iis,net core 网站)中。该网站是托管在另一台服务器(apache,wamp)中的 Wordpress,也在公司中。两者都有不同的 public IP,但都托管在同一域的子域下。
比如说,wordpress.company.com 和 search.company.com,我可以控制两者。
我第一次使用 iframe 插件进行测试时,一切似乎都正常,但我现在意识到,Edge 中显示了这个错误。所有浏览器都显示相同的行为,但没有显示类似的消息。
This content can’t be shown in a frame
There is supposed to be some content here, but the publisher doesn’t
allow it to be displayed in a frame. This is to help protect the
security of any information you might enter into this site.
Try this
Open this in a new window (which is a link to iframes content url)
奇怪的是我只需按 F5 即可正确加载所有内容。
Chrome 控制台中的错误是:
Refused to display 'http://subdomain.mysite.com/' in a frame because
it set 'X-Frame-Options' to 'sameorigin'.
如何解决此问题?
该问题与 here 中描述的问题类似,但原因是 .net Core。并且解决方案也类似。
您也可以在问题的评论中使用@user770 所做的建议。但是,这并不能解决 iframe 块。而且这个答案也没有解释为什么刷新页面可以解决问题。然而,这对用户来说并不是一个好的体验。
因此,解决方案很简单,并且可以通过代码完成,这样,如果有人试图覆盖您服务器中的 X-Frame-Otions 设置,您将更加安全。任何多重设置都将在 'deny'.
中派生
在你项目的 startup.cs 文件中,你必须添加这个,以防止 .net 核心自动添加 'sameorigin' 设置。
public void ConfigureServices(IServiceCollection services)
{
//YOU CAN HAVE SOME CODE HERE
services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);
}
但是,这可能会给您的站点带来风险,当您对两个站点和两个域都具有控制权时,将应用此方案。
为了保护站点,您必须设置 X-frame-options 设置以允许您想要的域。再次在 startup.cs 中执行以下操作。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//YOU MAY HAVE SOME CODE HERE
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "ALLOW-FROM http://*.MYCONTROLLEDDOMAIN.COM https://*.MYCONTROLLEDDOMAIN.COM");
await next();
});
}
这样您将允许您的域在 iframe 中请求此网站。
我开发了一个搜索表单,该表单托管在我公司的本地服务器(iis,net core 网站)中。该网站是托管在另一台服务器(apache,wamp)中的 Wordpress,也在公司中。两者都有不同的 public IP,但都托管在同一域的子域下。
比如说,wordpress.company.com 和 search.company.com,我可以控制两者。
我第一次使用 iframe 插件进行测试时,一切似乎都正常,但我现在意识到,Edge 中显示了这个错误。所有浏览器都显示相同的行为,但没有显示类似的消息。
This content can’t be shown in a frame
There is supposed to be some content here, but the publisher doesn’t allow it to be displayed in a frame. This is to help protect the security of any information you might enter into this site.
Try this
Open this in a new window (which is a link to iframes content url)
奇怪的是我只需按 F5 即可正确加载所有内容。
Chrome 控制台中的错误是:
Refused to display 'http://subdomain.mysite.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
如何解决此问题?
该问题与 here 中描述的问题类似,但原因是 .net Core。并且解决方案也类似。
您也可以在问题的评论中使用@user770 所做的建议。但是,这并不能解决 iframe 块。而且这个答案也没有解释为什么刷新页面可以解决问题。然而,这对用户来说并不是一个好的体验。
因此,解决方案很简单,并且可以通过代码完成,这样,如果有人试图覆盖您服务器中的 X-Frame-Otions 设置,您将更加安全。任何多重设置都将在 'deny'.
中派生在你项目的 startup.cs 文件中,你必须添加这个,以防止 .net 核心自动添加 'sameorigin' 设置。
public void ConfigureServices(IServiceCollection services)
{
//YOU CAN HAVE SOME CODE HERE
services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);
}
但是,这可能会给您的站点带来风险,当您对两个站点和两个域都具有控制权时,将应用此方案。
为了保护站点,您必须设置 X-frame-options 设置以允许您想要的域。再次在 startup.cs 中执行以下操作。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//YOU MAY HAVE SOME CODE HERE
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "ALLOW-FROM http://*.MYCONTROLLEDDOMAIN.COM https://*.MYCONTROLLEDDOMAIN.COM");
await next();
});
}
这样您将允许您的域在 iframe 中请求此网站。