我需要从一些可以为 iframe 渲染内容的操作中移除 X-Frame-Options: SAMEORIGIN
标头。由于默认情况下它会被添加到请求中,因此我在 Startup.cs
中禁用了它:services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = false);
。然后我写了一个简单的中间件:
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
await next();
});
需要响应跨域请求的操作使用结果过滤器属性进行装饰:
public class SuppresXFrameOptionFilter : ResultFilterAttribute
{
public override async Task OnResultExecutionAsync(ResultExecutingContext context,
ResultExecutionDelegate next)
{
context.HttpContext.Response.Headers.Remove("X-Frame-Options");
await next();
}
}
奇怪的是,第一个跨域请求失败了,因为尽管过滤器最终按预期工作,但在响应中仍然存在X-Frame-Options: SAMEORIGIN
(我在中间件的next()
后检查过 - 标头再次出现)。 如果我按F5,响应中将不再有该标头,并且一切正常。 这只发生在X-Frame-Options
标头,自定义标头可以正确删除。
是什么导致已经被移除的X-Frame-Options
重新出现在响应中?