0

我有一个使用 esi:include 标记来包含模块的内容页面,所以让我们说

/content.html

包含

<esi:include src="/_esi/module.html">

两个 url 在其响应中发送缓存控制标头。对于 /content.html 它是

Cache-Control: public, max-age=86400

对于 /_esi/module.html 它是

Cache-Control:public, max-age=3600

当我加载 /content.html 时,我可以看到我从清漆中获得了一个缓存响应,并且 module.html 标记被适当地包含,但是,当我更改 module.html 并禁止它时:ban req.url == /_esi/module.html或者即使我使该禁令更广泛:ban req.url ~ _esi我的浏览器中的页面仍然没有改变。

我似乎在清漆文档中找​​不到太多关于此的内容。我是否能够显式地使包含的内容(即来自 ESI url 的片段)无效,还是必须等待它过期?

我也尝试实施和使用 PURGE 来实现这一点,但我似乎仍然无法从该包含中获得新鲜内容。

4

1 回答 1

2

Varnish ESI 将在交付时将页面的最终版本拼接在一起。

如果缺少一个对象,它将把它拥有的东西发送给客户端,然后等待获取完成后再继续。如果新获取的对象也是一个 ESI 对象并且有一个包含,这会导致另一个获取,依此类推。包含首先处理深度。

任何包含 ESI 的对象都作为缓存中的常规对象存在,并且可以像任何其他对象一样被清除/禁止/无效。

就您所看到的而言,我的猜测是您的浏览器缓存正在干扰。尝试使用 curl、httpie 或 lwp-request 在命令行上重现它。

于 2015-07-14T07:08:57.867 回答