共享代理缓存中 Vary: * 的含义
了解为什么带有 Vary: * 的已存储响应无法通过正常的共享缓存选择与后续请求匹配。
带有 Vary: * 的已存储响应总是无法通过正常的 Vary 匹配检查。代理不能仅仅因为后续请求的 URL 和可见头部看起来相似,就断定它有权获得同一表示。
把它与下面的情况对比:
Vary: Accept-Encoding
这里命名了一个缓存可以比较的请求字段。通配符表示这类头部比较并不充分。提高新鲜度或增大缓存容量都不会补上缺失的选择信息。
区别在于存储与复用。缓存可以保留对验证有用的信息,但已存储的通配符变体不会变成能够满足下一个请求的正常匹配响应。代理通常需要改为联系源站。
让响应策略描述应用本身
如果你控制源站,而表示确实只随可识别的请求头部变化,就准确写出这些字段。不要仅仅因为那个例子可缓存就把通配符换成 Accept-Encoding:应用也可能随语言、授权或这些头部之外的信息变化。
如果内容是私有的或不应被存储,请通过相应的缓存策略表达这一点。去掉 Vary 并不会让个性化内容可以安全共享。
Squid 的 vary_ignore_expire 涉及可变响应的过期处理和历史 HTTP 行为,并不是让通配符变得可匹配的开关。