【问题标题】:Caching with cookies without caching Cookies使用 cookie 缓存而不缓存 Cookie
【发布时间】:2016-07-21 00:14:12
【问题描述】:

根据欧洲关于 cookie 的规则,我们需要显示一条消息,让用户知道我们使用 cookie。

当他们接受时,我们会设置一个 cookie!除了严重依赖跟踪 cookie,我们还需要这个 cookie :(

我已经设置 Varnish 来缓存资产和我的着陆页,这自然会对速度产生巨大影响。资产在做梦,主页永远不会从服务器接收 Set-Cookie,因为这就是 Varnish 开箱即用的配置方式。

我们的 varnish 服务器是 Centos 7,它已经安装了 Varnish 4。我们的目标是最终迁移到 Fastly,他们有一个指南来做我想做的事,它允许我们使用 Cookie 并避免缓存它们。

https://www.fastly.com/blog/how-to-cache-with-tracking-cookies

但是,req 变量不再在 Varnish 4 中的 vcl_deliver 范围内。

有没有人能找到解决这个问题的方法?

【问题讨论】:

    标签: caching cookies varnish varnish-vcl varnish-4


    【解决方案1】:

    您应该能够只将“Tmp-Cookie”存储在 beresp 而不是 bereq 中,在这种情况下它将传播到 resp 在 vcl_deliver 中。然后您可以将其复制到 Set-Cookie

    所以是 Fastly 推荐的修改版:

    sub vcl_backend_response {
        if (beresp.http.Set-Cookie) {
            # ... so store it temporarily
            set bereq.http.Tmp-Set-Cookie = beresp.http.Set-Cookie;
            # ... and then unset it
            unset beresp.http.Set-Cookie;
        }
    }
    
    sub vcl_deliver {
        if (resp.http.Tmp-Set-Cookie) {
            set resp.http.Set-Cookie = resp.http.Tmp-Set-Cookie;
            unset resp.http.Tmp-Set-Cookie;
        }
    }
    

    这应该等同于响应处理,但您仍然希望最有可能处理传入的请求 cookie(如果相关)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      相关资源
      最近更新 更多