varnish-devicedetect让我根据用户代理返回不同的回复:
...
elsif (req.http.User-Agent ~ "(?i)ipad") { set req.http.X-UA-Device = "tablet-ipad"; }
elsif (req.http.User-Agent ~ "(?i)ip(hone|od)") { set req.http.X-UA-Device = "mobile-iphone"; }
...
并允许用户通过设置Cookie来选择不同的设备体验:
if (req.http.Cookie ~ "(?i)X-UA-Device-force") {
...
}
我是否需要添加Vary: Cookie
才能获得正确的客户端缓存行为?
例如:
Vary: User-agent
X-UA-Device-force: pc
。答案 0 :(得分:1)
是的,您需要设置Vary: Cookie
标头才能获得正确的行为,因为不同的Cookie会检索不同的输出。
您还需要在vcl_recv
上设置适当的X-UA-Device
来处理Cookie,以便在清漆中正确地散列项目。
答案 1 :(得分:0)
如果您改变了cookie,那么您也可以通过缓存窗口,因为大多数用户将拥有不同的cookie(特别是如果您的网站上有任何分析),因此您的命中率较低且多个副本缓存中的相同数据。
不是改变cookie,而是对特定的cookie值进行散列,如下所示:
if (req.http.cookie ~ "(?i)X-UA-Device-force" ) {
hash_data("deviceforce");
} else {
hash_data("nodeviceforce");
}