【发布时间】:2015-11-18 13:00:25
【问题描述】:
我添加到清漆配置
sub vcl_fetch {
set beresp.do_esi = true;
}
}
在我的 mvc 应用程序中,我有一个子操作
<div>@* this should not be cached, I change the returned value in my DB *@
1 @Html.Action("GetHour", "Index", new { id = 5 })
</div>
<div>
2
<esi:include>@* this should be cached *@
@Html.Action("GetHour", "Index", new { id = 5 })
</esi:include>
</div>
并添加了一个请求头
Request.Headers.Add("X-Esi", "1");
但是 Varnish 一直在缓存整个页面。
我错过了什么?
我在浏览器中注意到请求标头 X-Esi 不存在。
还清漆正确删除标签<esi:include
GetHour 中的代码非常简单,只需从 SQL Server 中检索一个小数。
【问题讨论】:
-
我不认为您可以将内容放在 esi:include 标记内并期望它被缓存。您需要在 esi:include 标记上指定 src 属性:
-
如果您不想缓存页面,您应该指定一个 Cache-Control 标头,其 max-age 或 s-maxage 为 0 以告诉 varnish 不要缓存
-
你是对的。更改为
并将 ttl 配置为 0 并且可以工作。谢谢。
标签: c# asp.net-mvc varnish esi donut-caching