1

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

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 header 可能是默认值,并且它正在更改。

我不想使用 OutputCache,因为仅对查询字符串参数 cached=true 启用了缓存。当我使用 ASP.NET MVC 4 时,我曾经看到响应

Vary:*

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

4

2 回答 2

1

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

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

此信息基于https://stackoverflow.com/a/11156510/1178314

于 2014-09-15T15:56:38.020 回答
0
<configuration>
   <system.webServer>
      <urlCompression 
          doStaticCompression="true" 
          doDynamicCompression="false" />
   </system.webServer>
</configuration>

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

于 2014-09-11T10:27:41.260 回答