0

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

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

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

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

  • esi
  • map
  • alice's house

第三段中的撇号是 HTML 编码的,因为它是在 HTML 文档中传输的。该空间是 URL 编码的,因为它是 URL 的一部分。

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

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

4

1 回答 1

0

我最终在 Varnish Github 问题跟踪器上发布了这个问题,答案似乎是:你不能。

解决方法是对链接进行 URL 编码,以避免使用 HTML 实体。

于 2016-08-11T18:44:41.170 回答