Примечание: Пожалуйста, поправьте меня, если какое-либо из моих предположений неверно. Я не очень уверен в этом ...
Я играл с 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
, но стараюсь избегать этого, если возможно, из-за того, что у него высокий процент промахов (много, много пользовательских агентов).