如何使用 OutputCacheLocation.ServerAndClient 而无需 Vary: * HTTP 标头

本文关键字:Vary HTTP 标头 何使用 OutputCacheLocation ServerAndClient | 更新日期: 2023-09-27 18:31:43

我正在尝试在MVC视图上使用OutputCache进行服务器和客户端缓存,但是将位置设置为ServerAndClient会强制设置HTTP标头Vary: *,这在很大程度上违背了客户端缓存的目的(它告诉浏览器每次使用资源时检查新鲜度)。

我希望浏览器将文件缓存 24 小时,并且只有在我更改添加到查询字符串的 LastModifield 参数时才发出另一个请求。如果我只有客户端作为位置,但我也希望服务器缓存文件,以便在其他用户请求相同资源时不需要重新生成它,则这有效。

该资源基于一个很少会更新的数据库(可能每月一次或两次,我知道它何时更改),并且资源可能会受到非常严重的打击,所以我不想一直生成它,甚至不想处理修改自有条件的请求。

我的输出缓存属性是:

[OutputCache(Location = OutputCacheLocation.ServerAndClient, Duration = 86400, VaryByParam = "LastModified")]

我尝试扩展 OutputCacheAttribute 类并覆盖所有 On* 方法并删除 Vary http 标头,但在调用所有这些方法之前似乎不会添加 Vary 标头。

如何使用 OutputCacheLocation.ServerAndClient 而无需 Vary: * HTTP 标头

Response.Cache.SetOmitVaryStar(true);