【问题标题】:ESI includes in JSON responseESI 包含在 JSON 响应中
【发布时间】:2014-10-07 21:27:10
【问题描述】:

我正在努力让 ESI 包含在 JSON 上下文中被替换。

以下工作正常。导致ESI标签被实际内容替换。

<esi:include src="http://domain.com/esipath/" />

这是行不通的。 ESI 标签没有被替换。

{
    "test": "<esi:include src="http://domain.com/esipath/" />"
}

我在 google 上找到了一些资源,一个可能的解决方案似乎将 esi_syntax 设置为 0x3,以便清漆跳过检查有效 XML。 这似乎不适用于 Varnish 4。当我使用运行时参数启动守护程序时,出现以下错误。

 Error: Unknown parameter "esi_syntax".

此设置在 Varnish 4 中是否已弃用?

有什么想法可以让它发挥作用吗?

【问题讨论】:

    标签: varnish esi


    【解决方案1】:

    确实该参数在 varnish4 中被贬低了。你要做的就是激活ESI_DISABLE_XML_CHECK功能。

    对我来说,我编辑 /etc/default/varnish(基于 debian 的系统)并添加

    -p feature=+esi_disable_xml_check
    

    DEAMON_OPTS参数为例:

    DAEMON_OPTS="-a :6081 \
                 -T localhost:6082 \
                 -f /etc/varnish/default.vcl \
                 -S /etc/varnish/secret \
                 -s malloc,4GB \
                 -p feature=+esi_disable_xml_check"
    

    【讨论】:

    • 也感谢您的回答! regilero 的回答为我指明了正确的方向。我会将您的回答标记为已接受,因为它是最完整的。赏金是给 regilero 的,因为他是第一个回答的人。
    【解决方案2】:

    this diff 上,我们可以看到esi_syntax 的删除,以及0x3 旧值的新esi_disable_xml_check 功能。

    我还在the man 上找到了esi_disable_xml_check 的参考。

    【讨论】:

    • 非常感谢。它现在正在工作。启用该功能,esi 立即加载。我现在有另一个问题,因为我的 esi 正在返回我放在 JSON 属性中的 html,但是由于未转义的 html,这会导致语法错误。尚不确定如何转义 html。必须在网络服务器上、在我的应用程序中或以某种方式使用清漆。
    • 恕我直言,您应该使用具有指定格式的 esi url,并且该格式应该要求 json 转义内容(在服务器端完成)。
    • 是的,这就是我实现它的方式。 myhost.com/esi/?jsonEncode=true。现在一切正常。
    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多