大家好。我在 Varnish 上使用 Edge Side Includes 来缓存静态 HTML shell,然后包含一些动态 HTML 和 JSON 对象。
HTML 的 ESI 已正确包含,但 JSON 对象的 ESI 未包含;调试语句确定 Varnish 可以看到它,但它莫名其妙地决定不包含 JSON ESI。
这是加载结构:
page uncached. blank page with headers to set a cookie and esi 1
esi 1 cached. A bunch of static HTML, plus esi 2 and esi 3
esi 2 uncached. A JSON object which is different on every page load.
esi 3 uncached. Some HTML which updates with every page load.
同样,esi 1和esi 3工作得很好,但esi 2没有被包括在内。esi 2的内容是这样的:
{session_page_history_id:24231}
我读到看起来不像 XML 的 ESI 代码会导致错误,所以我设置了运行时参数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 没有被解析/包含?任何帮助将不胜感激!