Вопрос

Всем привет.Я использую 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.

По крайней мере, со мной лак игнорирует все параметры, но первый, если вы этого не сделаете.

Например:

Может быть, у вас будут проблемы с «[» и «]», и им также понадобится обратная черта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top