ASP.Net Core:X-Frame-Options的奇怪行为

18

我需要从一些可以为 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重新出现在响应中?

1个回答

34

我认为在第一次请求时,Antiforgery 会保存 cookie,这意味着它也会尝试设置 X-Frame-Options 标头。

如果您想禁用 Antiforgery 中的该标头并手动处理它,则需要将 SuppressXFrameOptionsHeader 设置为 true ;)

services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接