Требует ли Varnish-devicedetect переопределения пользовательского агента на основе файлов cookie для корректного кеширования браузера?

varnish-devicedetect позволяет мне возвращать разные ответы в зависимости от User-agent :

...
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, чтобы получить правильное поведение кэширования клиента?

Например:

  1. Я поставил только Vary: User-agent
  2. Пользователь просматривает страницу example.com/beep.
  3. Они соглашаются на работу с рабочим столом, устанавливая X-UA-Device-force: pc.
  4. Они перезагружают example.com/beep.
    Будет ли их браузер использовать кешированную мобильную версию, поскольку изменились только файлы cookie, а не User-agent?

person hurrymaplelad    schedule 08.01.2014    source источник


Ответы (2)


Да, вам нужно установить заголовок Vary: Cookie, чтобы получить правильное поведение, поскольку разные файлы cookie будут получать разные выходные данные.

Вам также нужно будет позаботиться о cookie-файле vcl_recv, установив соответствующий X-UA-Device, чтобы правильно хешировать предметы в лаке.

person NITEMAN    schedule 08.01.2014

Если вы меняете куки, то вы также можете кэшировать окно, так как у большинства пользователей будут разные куки (особенно, если у вас есть какая-либо аналитика на вашем сайте), поэтому у вас будет низкий процент попаданий и несколько копий одних и тех же данных в ваш кеш.

Вместо того, чтобы изменять файл cookie, сделайте хэш для конкретного значения файла cookie, например:

if (req.http.cookie ~ "(?i)X-UA-Device-force" ) {
  hash_data("deviceforce");
} else {
  hash_data("nodeviceforce");
}
person dalore    schedule 19.06.2014
comment
Согласен, Вэри: печенье не очень. Я считаю, что вы могли бы получить приличный процент попаданий, если бы были очень осторожны с файлами cookie, отправленными с того же домена. Файлы cookie аналитики обычно устанавливаются для домена службы аналитики (например, google.com) и не должны влиять на кеширование из нашего домена приложения, не так ли? - person hurrymaplelad; 22.06.2014
comment
Хеширование конкретного файла cookie имеет смысл в лаке. Как вы могли бы сообщить о возможности кэширования нижестоящим клиентам, таким как браузер? Кажется, единственные варианты включают Vary: cookie или no-cache в ответ от лака... Есть ли другие варианты? - person hurrymaplelad; 22.06.2014