我需要从我的一些操作中删除X-Frame-Options: SAMEORIGIN头,这些操作应该为iframe呈现内容。只要它被默认添加到请求中,我就在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再次出现在响应中?
发布于 2016-11-10 19:29:58
我认为在第一次请求时,Antiforgery会保存cookie,这意味着它还会尝试设置X-Frame-Options头。
如果您想在防伪中禁用标头并手动处理它,您需要将SuppressXFrameOptionsHeader 设置为true ;)
services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);https://stackoverflow.com/questions/40523565
复制相似问题