我有ASP.NET Core 2.2应用程序。对于用户单击浏览器的后退按钮的情况,我已经在所有控制器上设置了no-store=true
[ResponseCache(NoStore = true)]
public class MyController:Controller
{
}
,在startup.cs中,我要添加AutoValidateAntiforgeryTokenAttribute
services.AddMvc(options =>
{
options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
})
但是对于每个请求,我都会看到警告记录
'Cache-Control'和'Pragma'标头已被覆盖并设置 分别设置为“无缓存,无存储”和“无缓存”,以防止缓存 这个回应。使用伪造的任何回应都不应 已缓存。
我了解任何使用反伪造的响应都不应被缓存,并且我确实设置了NoStore=true
。那么为什么会有警告。
如果我删除了[ResponseCache(NoStore = true)]
,那么警告就消失了。但是在用户单击后退按钮的情况下,我需要该属性
答案 0 :(得分:0)
NoStore
不够。该警告是默认防伪逻辑检查“ no-cache”的“ cache-control”和“ pragma”标头值的结果。如果'cache-control'标头不包含'no-cache'或'pragma'标头不是'no-cache'或为空,则创建该警告。
您始终必须在缓存设置中包含该位置:
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
这会将“ cache-control”标头设置为“ no-store,no-cache”,并将“ pragma”标头设置为“ no-cache”,并且不会创建警告。