2010-12-21 5 views
0

Эй, все. Я использую Edge Side Includes on Varnish для кэширования статической оболочки HTML, а затем включает в себя некоторый динамический HTML и объект JSON.Лак ESI распознается, но не включен

ESI для HTML включен правильно, но ESI для объекта JSON не включается; Заявления отладки устанавливают, что Varnish видит это, но он необъяснимо решает не включать JSON ESI.

Вот погрузка структура:

 
pageuncached. blank page with headers to set a cookie and esi 1
esi 1cached. A bunch of static HTML, plus esi 2 and esi 3
esi 2uncached. A JSON object which is different on every page load.
esi 3uncached. Some HTML which updates with every page load.

Опять еси 1 и еси 3 работы просто отлично, но еси 2 не получает включен. Содержание в ЭРИ 2 только это:


{session_page_history_id:24231} 

Я прочитал, что ESI код, который не похож на XML приводит к ошибкам, так что я установить параметр выполнения esi_syntax = 0x7. Нет кубиков, но, по крайней мере, сейчас я получаю отладочные данные.

Разбитый призыв к ЭРИ 2 выглядит следующим образом:


<esi:include src="http://www.domain.com/dynamic_esi/print_variables?esi__desired_var_names[]=session_page_history_id&for_esi=1"/> 

И в (рабочий) призыв к ЭРИ 3 выглядит следующим образом:


<esi:include src="http://www.domain.com/dynamic_esi/get_service_magic_html?&for_esi=1"/> 

Как я уже говорил, отделочные материалы похоже, что я пытаюсь включить ESI, но это единственное релевантное сообщение отладки, которое я получаю от лакового дерева:


    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 не получает синтаксический анализ/включен? Любая помощь была бы высоко оценена!

ответ

1

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

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

1

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

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

т.д .:

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