据我所知,HTTP 标头Vary
指定以逗号分隔的 HTTP 标头列表,在确定请求是缓存命中还是未命中时,缓存需要将这些标头与 URL 一起考虑。
如果省略该标头,则表示仅考虑 URL。
但是当标题是时会发生什么Vary:*
?
RFC 2616 14.4
Vary 字段值 *** 表示未指定的参数不
仅限于请求标头(例如,
client),在响应表示的选择中发挥作用。
* 值不能由代理服务器生成;可能只是
由原始服务器生成。
RFC 2616 13.6
Vary 标头字段值为* 总是匹配失败以及随后的
对该资源的请求只能由
源服务器。
这是否意味着带有此标头的所有请求都将是缓存未命中?
我发现 ASP.NET 正在返回该 HTTP 标头,如果您使用它们的OutputCacheAttribute
,如果您不需要标头,或者您想指定自定义标头,则必须显式禁用该行为,所以我(想)相信这是不可能的。
其实际意义是什么Vary:*
?
Thanks.
Vary:* 告诉缓存已根据 HTTP 内容协商的常规方面之外的方面(例如 Accept、Accept-Language、Accept-Charset)来选择响应。
实际上,这告诉缓存不要缓存响应。这就是“对该资源的后续请求只能由源服务器正确解释”的含义。缓存必须将这些请求转发到源服务器。
编辑:变化与缓存正交。考虑一下:
获取 /foo HTTP/1.1
200 好的
缓存控制:maxage=60
内容位置:/foo.html
各不相同: *
Vary:* 告诉缓存无法缓存对 /foo 的请求的响应。但由于 Content-Location 标头,缓存仍然可以存储对 /foo.html 的请求的响应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)