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