添加ResponseCache属性时会记录Cache-Control警告

时间:2019-07-31 21:19:37

标签: asp.net-core asp.net-core-mvc asp.net-core-2.0

我有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)],那么警告就消失了。但是在用户单击后退按钮的情况下,我需要该属性

1 个答案:

答案 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”,并且不会创建警告。