Привет всем. Я использую Edge Side Includes на Varnish для кэширования статической оболочки HTML, а затем включаю динамический HTML и объект JSON.
ESI для HTML включается правильно, но ESI для объекта JSON не включается; Операторы отладки устанавливают, что Varnish видит это, но по непонятным причинам решает не включать JSON ESI.
Вот структура загрузки:
<strong>page</strong> <em>uncached</em>. blank page with headers to set a cookie and <strong>esi 1</strong><br>
<strong>esi 1</strong> <em>cached</em>. A bunch of static HTML, plus <strong>esi 2</strong> and <strong>esi 3</strong><br>
<strong>esi 2</strong> <em>uncached</em>. A JSON object which is different on every page load.<br>
<strong>esi 3</strong> <em>uncached</em>. Some HTML which updates with every page load. </p>
<p>
Опять же, 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 2 не анализируется / не включается? Буду признателен за любую помощь!