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