Рейтинг:0

Как вы пропускаете вызов в лаке, если не установлен файл cookie «lang»?

флаг my

Как вы пропускаете вызов в лаке, если не установлен файл cookie «lang»? Я хочу, чтобы вызов прошел и не возвращал кеш, когда файл cookie «lang» установлен, и отправить запрос в apache, как мне это сделать?

Рейтинг:1
флаг in

Обход кеша, когда не был установлен lang cookie

В самой простой форме это код VCL, который вам нужно проходят запросы к серверной части, которые не содержат язык куки:

суб vcl_recv {
    if(req.http.Cookie !~ "(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[^;]*)+ )) {
        вернуться (пройти);
    }
}

Однако вам, вероятно, потребуется определить некоторую логику на случай, если язык куки был установлен.

Использование значения файла cookie lang

Следующий фрагмент кода VCL извлекает язык, установленный язык cookie и сохраняет его в req.http.lang.

Это значение используется для создания варианта кеша для каждого языка:

суб vcl_recv {
    if(req.http.Cookie !~ "(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[^;]*)+ )) {
        вернуться (пройти);
    } 
    установить req.http.lang = regsub(req.http.Cookie,"(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[ ^;]*)+)","\3");
    //Некоторая другая логика
    возврат (хеш);
}

суб vcl_hash {
    если (треб.http.язык) {
        hash_data(req.http.lang);
    }
}

Фрагмент выше также явно вызывает возврат (хэш). В какой-то момент вам нужно будет принудительно кэшировать Varnish, когда язык cookie установлен, потому что стандартное поведение Varnish кэширует что-либо при наличии файлов cookie.

я добавил //Некоторая другая логика комментарий, потому что я предполагаю, что будет больше логики для обхода кеша. Например, когда запрашиваются методы, отличные от ПОЛУЧАТЬ и ГЛАВНЫЙ используются или для пользовательских шаблонов URL-адресов, которые необходимо обходить кеш.

Избегайте слишком большого количества вариаций кеша

hash_data(req.http.lang) Оператор гарантирует, что вариант кэша будет создан для каждого значения, которое язык cookie может иметь.

Опасность в том, что пользователи с плохими намерениями начинают добавлять случайные значения в язык cookie для заполнения кеша.

Помня об этом риске, имеет смысл явно указать поддерживаемые языки в вашем регулярном выражении.

Вот исходное регулярное выражение:

(^|([^;]*;)+)\s*lang=([^;]*)\s*($|(;[^;]*)+)

Вот пример с жестко запрограммированными поддерживаемыми языками:

(^|([^;]*;)+)\s*lang=(en|es|de|it|es|fr|nl)\s*($|(;[^;]*)+)

Просто адаптируйте это регулярное выражение к своим потребностям и языкам, которые поддерживает ваша веб-платформа.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.