ASP.Net 核心:X-Frame-Options 奇怪的行为
ASP.Net Core: X-Frame-Options strange behavior
我需要从我的一些应该呈现 iframe 内容的操作中删除 X-Frame-Options: SAMEORIGIN
header。只要它默认添加到请求中,我就在 Startup.cs
: services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = false);
中禁用了它。然后我写了一个简单的中间件:
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
await next();
});
响应 cross-domain 请求所需的操作使用结果过滤器属性修饰:
public class SuppresXFrameOptionFilter : ResultFilterAttribute
{
public override async Task OnResultExecutionAsync(ResultExecutingContext context,
ResultExecutionDelegate next)
{
context.HttpContext.Response.Headers.Remove("X-Frame-Options");
await next();
}
}
奇怪的事情来了。第一个 cross-domain 请求失败,因为尽管过滤器最终按预期工作,但 X-Frame-Options: SAMEORIGIN
仍然存在于响应中(我在中间件 next()
之后检查了它 - header重新出现)。如果我按 F5,header 不再出现在响应中,并且一切正常。只有 X-Frame-Options
header 才会发生这种情况,一个自定义的被正确删除。
是什么让被删除的 X-Frame-Options
再次出现在响应中?
我会说在第一次请求时 Antiforgery 保存了 cookie,这意味着它还尝试设置 X-Frame-Options
header.
如果您想在 Antiforgery 中禁用 header 并自己手动处理它,您需要将 SuppressXFrameOptionsHeader
设置为 true ;)
services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);
我需要从我的一些应该呈现 iframe 内容的操作中删除 X-Frame-Options: SAMEORIGIN
header。只要它默认添加到请求中,我就在 Startup.cs
: services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = false);
中禁用了它。然后我写了一个简单的中间件:
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
await next();
});
响应 cross-domain 请求所需的操作使用结果过滤器属性修饰:
public class SuppresXFrameOptionFilter : ResultFilterAttribute
{
public override async Task OnResultExecutionAsync(ResultExecutingContext context,
ResultExecutionDelegate next)
{
context.HttpContext.Response.Headers.Remove("X-Frame-Options");
await next();
}
}
奇怪的事情来了。第一个 cross-domain 请求失败,因为尽管过滤器最终按预期工作,但 X-Frame-Options: SAMEORIGIN
仍然存在于响应中(我在中间件 next()
之后检查了它 - header重新出现)。如果我按 F5,header 不再出现在响应中,并且一切正常。只有 X-Frame-Options
header 才会发生这种情况,一个自定义的被正确删除。
是什么让被删除的 X-Frame-Options
再次出现在响应中?
我会说在第一次请求时 Antiforgery 保存了 cookie,这意味着它还尝试设置 X-Frame-Options
header.
如果您想在 Antiforgery 中禁用 header 并自己手动处理它,您需要将 SuppressXFrameOptionsHeader
设置为 true ;)
services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);