【发布时间】:2014-05-21 12:45:55
【问题描述】:
Varnish 默认行为是从不查找包含Cookie 标头的请求。换句话说,包含Cookie 标头的请求永远不会被缓存。我需要覆盖此行为以忽略带有 Cookie 标头的请求。
考虑我的应用程序中的下一个用户行为:
- 用户进入应用主页(
/),页面应该被缓存,后端返回publiccache-control,一切正常,页面被Varnish缓存。 - 用户导航到不可缓存的自定义页面 (
/not-cacheable),后端返回private缓存控制。还会在响应中返回Set-Cookie标头。 Varnish 会忽略这个请求,最终用户会得到一个 cookie。到目前为止一切顺利。 - 用户导航回主页 (
/),请记住,该主页已被缓存。问题是,用户请求现在带有一个Cookie标头。这会导致 Varnish 忽略请求并委托给后端。
删除Cookie 不起作用,因为当用户返回/not-cacheable 路由时,他将看不到他的个性化页面,因为Cookie 标头已被删除.相反,后端会返回一个新生成的会话,并在 Set-Cookie 中添加一个新的 id。
此外,在 Varnish 中查找每个 Cookie 请求会导致每个关于方法或后端响应的请求都被缓存。
如果有某种方法可以告诉 Varnish 忽略 Cookie 标头,这样我就可以缓存带有该标头的请求,让后端决定请求是否应该可缓存。
有什么想法吗?
【问题讨论】:
标签: http cookies browser-cache varnish varnish-vcl