Лак ESI признан но не включен - PullRequest
0 голосов
/ 22 декабря 2010

Привет всем. Я использую 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 не анализируется / не включается? Буду признателен за любую помощь!

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Попробуйте добавить обратную косую черту перед «&» в строке запроса.

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

т.д .:

Возможно, у вас возникнут проблемы с "[" и "]", и им также потребуется обратная косая черта.

1 голос
/ 22 декабря 2010

Так что, очевидно, тег ESI не обрабатывался, потому что он был внутри блока // [CDATA [.Я уверен, что это как-то связано с соблюдением XML.Я думал, что установка esi_syntax = 7 предотвратит такую ​​проблему, но оказывается, что это влияет только на содержимое самого ESI (это не снимает проверки безопасности для кода, который выполняет включение).

Решение состоит в том, чтобы переработать мое приложение так, чтобы ESI представлял собой собственный автономный тег сценария.

...