我如何引用包含带有 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's%20house"/>
这 应该 导致 ESI 请求具有 3 个段且没有查询字符串的路径,当完全解码时,导致:
esi
map
alice's house
第三段中的撇号是 HTML 编码的,因为它是在 HTML 文档中传输的。 space 是 URL 编码的,因为它是 URL.
的一部分
然而,在发出 ESI 请求之前,Varnish 似乎没有解码 HTML 编码的实体。它发送对 /esi/map/alice's%20house
的请求,这是一个错误的请求,因为 &
在路径或 URL.
中不合法
如何让 Varnish 正确处理这些 ESI 链接?
我最后在 Varnish Github issue tracker 上发布了这个问题,答案似乎是:你不能。
解决方法是对 link 进行 URL 编码,以避免需要使用 HTML 个实体。
我正在使用 Varnish 4.1.2,并尝试包含 ESI 内容。有时,包含内容的 URL 可能包含编码的 HTML 实体,例如 '
('
).
例如,我的应用程序为外部 shell 返回的 HTML 中有以下内容:
<esi:include src="/esi/map/alice's%20house"/>
这 应该 导致 ESI 请求具有 3 个段且没有查询字符串的路径,当完全解码时,导致:
esi
map
alice's house
第三段中的撇号是 HTML 编码的,因为它是在 HTML 文档中传输的。 space 是 URL 编码的,因为它是 URL.
的一部分然而,在发出 ESI 请求之前,Varnish 似乎没有解码 HTML 编码的实体。它发送对 /esi/map/alice's%20house
的请求,这是一个错误的请求,因为 &
在路径或 URL.
如何让 Varnish 正确处理这些 ESI 链接?
我最后在 Varnish Github issue tracker 上发布了这个问题,答案似乎是:你不能。
解决方法是对 link 进行 URL 编码,以避免需要使用 HTML 个实体。