我有一个内容页面使用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来实现这一目标,但我似乎无法从中获得新的内容。
答案 0 :(得分:2)
Varnish ESI将在交付时将页面的最终版本拼接在一起。
如果某个对象丢失,它会将其所拥有的内容发送给客户端,然后等待提取完成后再继续。如果新获取的对象也是ESI对象并且具有include,则会导致另一次获取,依此类推。首先处理包含深度。
任何包含ESI的对象都作为常规对象存在于缓存中,并且可以像任何其他对象一样被清除/禁止/无效。
就你所看到的而言,我的猜测是你的浏览器缓存正在干扰。尝试使用curl,httpie或lwp-request在命令行上重现它。