我如何引用包含带有 Varnish 的编码 HTML 实体的 ESI URL?

How can I reference an ESI URL that includes an encoded HTML entity with Varnish?

我正在使用 Varnish 4.1.2,并尝试包含 ESI 内容。有时,包含内容的 URL 可能包含编码的 HTML 实体,例如 ' (').

例如,我的应用程序为外部 shell 返回的 HTML 中有以下内容:

<esi:include src="/esi/map/alice&#x27;s%20house"/>

应该 导致 ESI 请求具有 3 个段且没有查询字符串的路径,当完全解码时,导致:

第三段中的撇号是 HTML 编码的,因为它是在 HTML 文档中传输的。 space 是 URL 编码的,因为它是 URL.

的一部分

然而,在发出 ESI 请求之前,Varnish 似乎没有解码 HTML 编码的实体。它发送对 /esi/map/alice&#x27;s%20house 的请求,这是一个错误的请求,因为 & 在路径或 URL.

中不合法

如何让 Varnish 正确处理这些 ESI 链接?

我最后在 Varnish Github issue tracker 上发布了这个问题,答案似乎是:你不能。

解决方法是对 link 进行 URL 编码,以避免需要使用 HTML 个实体。