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

vto*_*ola 8 caching http http-caching http-headers

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

如果省略该标头,则表示仅考虑URL.

但是当标题出现时会发生什么Vary:*

RFC 2616 14.4

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

RFC 2616 13.6

Vary的头字段值*始终无法匹配,并且该资源上的后续请求只能由源服务器正确解释.

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

我发现如果您使用它们OutputCacheAttribute,ASP.NET将返回该HTTP标头,如果您不想要标头,或者您想要指定自定义标头,则必须显式禁用该行为,因此我(想)相信它不太可能.

哪个是实用意义Vary:*

谢谢.

Jan*_*sen 6

Vary:* 告诉缓存已经根据 HTTP 内容协商的通常方面之外的方面(例如接受、接受语言、接受字符集)选择了响应。

这实际上告诉缓存不要缓存响应。这就是“对该资源的后续请求只能由源服务器正确解释”的含义。缓存必须将这些请求转发到源服务器。

编辑:Vary 与缓存正交。考虑一下:

获取 /foo HTTP/1.1

200 Ok 缓存控制:maxage=60 内容位置:/foo.html 变化:*

Vary:* 告诉缓存无法缓存对 /foo 的请求的响应。但是由于 Content-Location 标头,缓存仍然可以将请求的响应存储到 /foo.html。

  • 我仍然没有看到那个标题的意义。为什么我应该使用它而不是 no-cache 或 no-store?为什么asp.net 会将此标头与缓存指令一起发送? (3认同)