HTTP标头的含义是什么变化:*

时间:2011-09-29 15:48:15

标签: http caching http-headers http-caching

据我所知,HTTP标头Vary指定了一个逗号分隔的HTTP标头列表,在确定请求是否为缓存命中或未命中时,需要由缓存和URL一起考虑。

如果省略该标题,则表示仅考虑该URL。

但标题为Vary:*时会发生什么?

RFC 2616 14.4

  

***的Vary字段值表示未指定的参数   限于请求标头(例如,网络地址)   客户端),在选择响应表示中发挥作用。   *值绝不能由代理服务器生成;它可能只是   由原始服务器生成。

RFC 2616 13.6

  

*的Vary标头字段值始终无法匹配和后续   对该资源的请求只能由   原始服务器。

这是否意味着具有此标头的所有请求都将成为缓存未命中?

我发现如果您使用OutputCacheAttribute,ASP.NET会返回该HTTP标头,如果您不想要标头,或者您想指定自定义标头,则必须显式禁用该行为,所以我(想)认为这不太可能。

Vary:*的实际意义是什么?

感谢。

1 个答案:

答案 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。