'Vary: If-None-Match' для раздельного кэширования запросов мобильных и настольных компьютеров

Примечание: Пожалуйста, поправьте меня, если какое-либо из моих предположений неверно. Я не очень уверен в этом ...

Я играл с HTTP-кешированием на Heroku и пытался решить хороший способ различать мобильные и настольные запросы при кешировании с помощью Varnish на Heroku.

Моя первая идея заключалась в том, что я мог бы установить заголовок Vary , чтобы кеш был изменен на If-None-Match . Поскольку Rails автоматически отправляет обратно etags, сгенерированные из хэша контента, etag будет различаться между настольными и мобильными запросами (разные шаблоны), и поэтому в конечном итоге он будет кэшировать две версии (не факт, просто мои первоначальные мысли). Я экспериментировал с этим, но не думаю, что это работает.

Во-первых, я не могу обернуть голову, когда / если что-то кэшируется, поскольку обязательно запрашивает с If-None-Match все равно будет условно достанется? Во-вторых, на практике на мобильный сайт иногда приходят свежие запросы (без If-None-Match). Это потому, что кэш не знает, использовать ли кэшированную версию для мобильных устройств или настольных компьютеров, поскольку заголовок If-None-Match отсутствует?

Как это, вероятно, звучит, я довольно запутался . Будет ли этот подход работать каким-либо образом, или я веду себя глупо? Кроме того, есть ли способ получить отдельные кэшированные версии, если я вообще не могу получить доступ к конфигурации Varnish (как я на Heroku)?

Точный код, который я использую в Rails для установки заголовков кеша:

response.headers['Cache-Control'] = 'public, max-age=86400'
response.headers['Vary'] = 'If-None-Match'

Изменить: Я знаю, что могу использовать Vary: User-Agent , но стараюсь избегать этого, если возможно, из-за того, что у него высокий процент промахов (много, много пользовательских агентов).

5
задан Cœur 28 December 2016 в 17:15
поделиться