ASP.NET MVC响应.缓存VaryByHeaders

本文关键字:缓存 VaryByHeaders 响应 MVC NET ASP | 更新日期: 2023-09-27 18:21:20

我有一个控制器可以提供一些响应,我正在尝试设置Cache,如下所示,

if(string.Equals( Request.Query["cached"] , "true", CultureInfo.IgnoreCase)){
   Response.Cache.SetCacheability(HttpCacheability.Private);
   Response.Cache.SetMaxAge(TimeSpan.FromDays(1));
   Response.Cache.VaryByHeaders["Cookie"] = true;
}

当我在Chrome中看到响应时,我会看到标题

Cache-Control: private, max-age=86400
Vary: Accept-Encoding

Vary标头可能是默认值,而且它正在更改。

我不想使用OutputCache,因为缓存仅针对querystring参数cached=true启用。当我使用ASP.NET MVC 4时,我经常看到响应

Vary:*

现在我已经将我的项目升级到了ASP.NET MVC 5,但它已经不起作用了。我只想根据登录和cookie在浏览器(客户端)缓存响应。

ASP.NET MVC响应.缓存VaryByHeaders

自2013年12月起,您可以在不影响可变标头的情况下激活IIS动态压缩。根据您的操作系统版本,您可能需要应用修补程序。

有关修补程序,请参阅以下kb。http://support.microsoft.com/kb/2877816

此信息建立在https://stackoverflow.com/a/11156510/1178314

<configuration>
   <system.webServer>
      <urlCompression 
          doStaticCompression="true" 
          doDynamicCompression="false" />
   </system.webServer>
</configuration>

动态压缩会剥离所有Vary标头,关闭它会使Vary正确显示。但现在我正在处理如何为我们的大多数请求启用Gzip,因为没有办法在不影响Vary标头的情况下启用动态压缩。