Лак ESI распознан, но не включен в комплект
-
12-10-2019 - |
Вопрос
Всем привет.Я использую Edge Side Includes в Varnish для кэширования статической HTML-оболочки, затем включаю некоторый динамический HTML и объект JSON.
ESI для HTML включается должным образом, но ESI для объекта JSON не включается;Инструкции Debug устанавливают, что Varnish видит это, но по необъяснимым причинам решает не включать JSON ESI.
Вот структура загрузки:
Страница некэшированный. blank page with headers to set a cookie and esi 1
esi 1 кэшированный. A bunch of static HTML, plus esi 2 and esi 3
esi 2 некэшированный. A JSON object which is different on every page load.
esi 3 некэшированный. Some HTML which updates with every page load.
Снова, esi 1 и esi 3 работает просто отлично, но esi 2 это не входит в программу.Содержание по адресу esi 2 это всего лишь:
{session_page_history_id:24231}
Я прочитал, что код ESI, который не похож на XML, вызывает ошибки, поэтому я установил параметр времени выполнения esi_syntax=0x7 .Никаких кубиков, но, по крайней мере, теперь я получаю некоторые отладочные данные.
Прерванный призыв к esi 2 выглядит примерно так:
<esi:include src="http://www.domain.com/dynamic_esi/print_variables?esi__desired_var_names[]=session_page_history_id&for_esi=1"/>
И (рабочий) призыв к esi 3 выглядит примерно так:
<esi:include src="http://www.domain.com/dynamic_esi/get_service_magic_html?&for_esi=1"/>
Как я уже упоминал, Varnish, похоже, распознает, что я пытаюсь включить ESI, но это единственное релевантное сообщение отладки, которое я получаю от varnishlog:
25 Debug c AddBit: 6997 <<![CDATA[
window.esi__values =
<esi:include src="http://www.domain.com/dynamic_esi/print_variables?esi__desired_var_names[]=session_page_history_id&for_esi=1"/>
;
//]]>
</script>
<link rel="stylesheet" href="http://www.
Выходные данные, которые видит клиент, содержат все обычное содержимое, но с сохраненным тегом <esi> .Это выглядит точно так же, как то, что вы видите в приведенном выше отладочном сообщении.
Кто-нибудь знает, почему esi 2 не анализируется / не включается?Мы были бы ОЧЕНЬ признательны за ЛЮБУЮ помощь!
Решение
Таким образом, очевидно, что тег ESI не обрабатывался, потому что он находился внутри блока //[CDATA[.Я уверен, что это как-то связано с соответствием требованиям XML.Я думал, что установка esi_syntax=7 предотвратит такую проблему, но оказывается, что это влияет только на содержимое самого ESI (это не отменяет проверки безопасности для кода, который выполняет включение).
Решение будет заключаться в переработке моего приложения таким образом, чтобы ESI был его собственным автономным тегом script.
Другие советы
Попробуйте добавить Backslash перед «&» в QueryString.
По крайней мере, со мной лак игнорирует все параметры, но первый, если вы этого не сделаете.
Например:
Может быть, у вас будут проблемы с «[» и «]», и им также понадобится обратная черта.