据我所知,HTTP标头Vary
指定了一个逗号分隔的HTTP标头列表,在确定请求是否为缓存命中或未命中时,需要由缓存和URL一起考虑。
如果省略该标题,则表示仅考虑该URL。
但标题为Vary:*
时会发生什么?
***的Vary字段值表示未指定的参数 限于请求标头(例如,网络地址) 客户端),在选择响应表示中发挥作用。 *值绝不能由代理服务器生成;它可能只是 由原始服务器生成。
*的Vary标头字段值始终无法匹配和后续 对该资源的请求只能由 原始服务器。
这是否意味着具有此标头的所有请求都将成为缓存未命中?
我发现如果您使用OutputCacheAttribute
,ASP.NET会返回该HTTP标头,如果您不想要标头,或者您想指定自定义标头,则必须显式禁用该行为,所以我(想)认为这不太可能。
Vary:*
的实际意义是什么?
感谢。
答案 0 :(得分:4)
Vary:*告诉缓存已根据HTTP内容协商的常规方面(例如Accept,Accept-Language,Accept-Charset)之外的方面选择响应。
实际上这告诉缓存不要缓存响应。这就是“对该资源的后续请求只能由原始服务器正确解释”的含义。缓存必须将这些请求转发到源服务器。
编辑:Vary与缓存正交。考虑一下:
GET / foo HTTP / 1.1
200好的 缓存控制:maxage = 60 内容位置:/foo.html 变化:*
Vary:*告诉缓存无法缓存对/ foo请求的响应。但由于Content-Location标头,缓存仍然可以将请求的响应存储到/foo.html。