лак и http заголовок

Я новичок в Varnish и хотел узнать, поддерживает ли Varnish кеширование с заголовком http. Мы разработали базовую веб-службу Rest, и я думаю об использовании Varnish для кэширования результатов. Как бы то ни было, некоторая информация о запросе (apikey) передается через заголовок http, и я хотел знать, можем ли мы, Varnish, принять это во внимание при проверке входящего запроса (против строки запроса).


person Ido Shilon    schedule 23.05.2011    source источник


Ответы (1)


Да, ты можешь. Как следует учитывать этот ключ API? Если вам нужны уникальные записи кеша для каждого пользователя, кеш будет использоваться только в том случае, если конкретный пользователь запрашивает одни и те же данные более одного раза. Вы можете пройти долгий путь без использования прокси-сервера кэширования, такого как varnish, путем настройки правильных заголовков HTTP-ответа Cache-Control (хотя актуальность данных не проверяется повторно).

Для этого в Varnish есть как минимум два подхода;

  1. Пусть ваше приложение возвращает заголовок HTTP-ответа Vary: apikey. Это дает указание любому кэшу уровня HTTP (например, varnish) повторно использовать результат кеширования только в том случае, если заголовки запроса apikey совпадают.

  2. # P4 #
    # P5 #
person ivy    schedule 24.05.2011
comment
Почему вы считаете изменение vcl_hash более эффективным, чем заголовок Vary? Я бы подумал, что вариант заголовка Vary: apikey - лучший выбор, поскольку он будет работать с любыми промежуточными кешами и не полагается на «магию» Varnish, которая скрыта от логики вашего приложения. - person Martijn Heemels; 09.11.2011
comment
Поиск хэша / ключа - O (1), а поиск заголовка Vary - O (n), где n - количество различных ключей api. Если у вас есть много разных записей кеша с одним и тем же хешем, вы должны рассмотреть каждую запись и проверить, все ли ее Vary-заголовки совпадают с текущим запросом. Это может быть неэффективно, если у вас много разных ключей api и только несколько ключей / ответов кеша. Проверьте код в bin / varnishd / cache_vary.c, в методе VRY_Match. - person ivy; 09.11.2011
comment
Для № 2 вам также необходимо return (hash); в конце вашего vcl_recv, чтобы избежать логики по умолчанию, которая по умолчанию pass будет выполнять все запросы с заголовками Authorization или Cookie. - person Steve Kehlet; 10.01.2015