ESI内容可以在清漆中被禁止/无效吗?

时间:2015-07-10 16:54:08

标签: varnish varnish-vcl esi

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

/content.html

包含

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

两个url都在其响应中发送cache-conttrol标头。对于/content.html 它的

Cache-Control: public, max-age=86400

和/_esi/module.html它的

Cache-Control:public, max-age=3600

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

我似乎无法在清漆文档中找​​到很多相关信息。我是否能够明确地使包含的内容无效(即来自ESI网址的片段)或我是否必须等待它过期?

我也尝试过实现和使用PURGE来实现这一目标,但我似乎无法从中获得新的内容。

1 个答案:

答案 0 :(得分:2)

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

如果某个对象丢失,它会将其所拥有的内容发送给客户端,然后等待提取完成后再继续。如果新获取的对象也是ESI对象并且具有include,则会导致另一次获取,依此类推。首先处理包含深度。

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

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