[英]Antiforgery and cache-control header ASP.NET core
我试图覆盖默认情况下asp.net core 2.0的防伪设置的cache-control
标头
.net核心始终将其设置为no-cache, no-store
。 我正在尝试使用private
,它实际上可以按我的意愿工作。 给我某种antiforgery token was meant for ... user..
偶尔的错误,似乎no-cache, no-store
总是不能正常工作。 哪种cache-control
设置为private
似乎可以解决。
但是.net core不允许我覆盖由防伪设置的默认cache-control
。
我尝试了以下方法:
public async Task<IActionResult> Login(string returnUrl)
{
HttpContext.Response.Headers.Append(Microsoft.Net.Http.Headers.HeaderNames.CacheControl, "private");
....
}
也
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext context)
{
// tried both
//context.HttpContext.Response.Headers.Add(HeaderNames.CacheControl, "private");
//context.HttpContext.Response.Headers[HeaderNames.CacheControl] = "private";
}
}
注意:现在仅用于http
使用防伪保护需要 Cache-Control: no-cache, no-store
头。 绝对不会在任何情况下缓存带有令牌的页面,因为针对该资源的每个请求都会重新生成令牌,并且必须将正确的令牌发送回以进行验证。 换句话说,绝对必须每次都从服务器请求新鲜的请求。 private
值不够好,因为它仍然允许在某些情况下进行缓存。
错误的原因是,在页面加载后和表单提交之前,用户身份验证状态已更改。 这可能是由于用户已登录或注销引起的。 防伪令牌将经过身份验证的用户用作其自身的一部分,因此,如果用户的身份验证状态发生更改,则令牌在提交后将不再有效。 如果用户登录或注销,则需要确保刷新页面,以便可以设置新的防伪cookie。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.