嘿,大家。我正在使用边缘侧包括在清漆上以缓存静态HTML外壳,然后包括一些动态HTML和一个JSON对象。

HTML的ESI被正确包含在内,但是未包括JSON对象的ESI;调试陈述确定清漆会看到它,但莫名其妙地决定不包括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 1ESI 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.

客户看到的输出包含所有正常内容,但是u003Cesi>标签完整。看起来就像您在上面的调试消息中看到的一样。

有人知道为什么ESI 2没有被解析/包括吗?任何帮助将不胜感激!

有帮助吗?

解决方案

因此,显然ESI标签没有被处理,因为它在a // [cdata [block。我敢肯定,这与XML合规性有关。我认为设置esi_syntax = 7会阻止这样的问题,但事实证明,这仅会影响ESI本身的内容(它不会提出包括执行此功能的代码的安全检查)。

解决方案将是重新处理我的应用程序,以使ESI是其自己的独立脚本标签。

其他提示

尝试在Querystring中的“&”之前添加后斜线。

至少我和我一起忽略了所有参数,但如果不这样做,则第一个参数。

例如:

也许您会遇到“ [和“”]的问题,他们还需要后斜切。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top