HTTP头的含义不同:*

HTTP头的含义不同:*,http,caching,http-headers,http-caching,Http,Caching,Http Headers,Http Caching,据我所知,HTTP头Vary指定了一个以逗号分隔的HTTP头列表,在决定请求是缓存命中还是未命中时,缓存需要将该列表与URL一起考虑 如果省略该标题,则表示只考虑URL 但是,当标题变化时会发生什么情况: ***的变量字段值表示未指定参数 仅限于请求头(例如,服务器的网络地址) 客户端),在响应表示的选择中发挥作用。 *值不能由代理服务器生成;可能只是 由源服务器生成 Vary header字段值*始终无法匹配和后续字段 对该资源的请求只能由 原始服务器 这是否意味着具有此标头的所有请求都将

据我所知,HTTP头
Vary
指定了一个以逗号分隔的HTTP头列表,在决定请求是缓存命中还是未命中时,缓存需要将该列表与URL一起考虑

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

但是,当标题变化时会发生什么情况:

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

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

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

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

Vary:
的实际意义是什么


谢谢。

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

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

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

GET/foo HTTP/1.1

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


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

我仍然看不到该标头的意义。为什么我应该使用它,而不是没有缓存或没有存储?为什么asp.net会将此标头与缓存指令一起发送?Variy不仅仅用于缓存。它记录了内容协商选择过程。删除Vary并使响应不可公开缓存将隐藏协商发生的事实。这将隐藏一个事实,即请求URI标识协商的资源,这可能是某些中介或客户端感兴趣的资源。。。现在确实有道理了。OutputCacheAttribute只是ASP.NET WebForms缓存API的包装器。ASP.NET WebForms基于POST调用(回发),因此响应总是随POST中的参数而变化,这些参数位于HTTP头和URL之外。这就是原因。万分感谢,你帮我省去了一个头疼的问题:我已经开始问一个与法利有关的新问题,你能告诉我我说的是否有意义吗?谢谢:如果Vary:*在没有内容位置的情况下传递,这不是原始问题的一部分,会发生什么-缓存总是丢失吗?这个答案并没有完全回答原来的问题。