在Symfony2 docs中有对stale-while-revalidate的引用:
// app/AppCache.php
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
class AppCache extends HttpCache
{
protected function getOptions()
{
return array(
'debug' => false,
'default_ttl' => 0,
'private_headers' => array('Authorization', 'Cookie'),
'allow_reload' => false,
'allow_revalidate' => false,
'stale_while_revalidate' => 2,
'stale_if_error' => 60,
);
}
}
但是,我无法使用Symfony2网关缓存实现以下行为(described here):
我使用了很多默认配置。我收到了以下回复:
首次请求时,响应来自服务器(耗时300毫秒)。
Age:0
Cache-Control:public, s-maxage=20
X-Symfony-Cache:GET /api/boards/kQVhc2uJ: miss, store
第二次请求时,响应来自网关缓存(耗时30ms)。
Age:4
Cache-Control:public, s-maxage=20
X-Symfony-Cache:GET /api/boards/kQVhc2uJ: fresh
在第三次请求时,响应来自服务器(耗时300ms)。
Age:0
Cache-Control:public, s-maxage=20
X-Symfony-Cache:GET /api/boards/kQVhc2uJ: stale, invalid, store
我希望从网关缓存和网关缓存返回第三个请求,以便对服务器进行异步调用以重新验证缓存。相反,我直接调用服务器通过网关缓存。
Symfony2网关缓存是否支持" state-while-revalidate"延期?或者它只适用于Squid或Varnish?
答案 0 :(得分:0)
答案是部分。来自Github issue的@jakzal评论:
@websirnik不会与HttpCache进行异步调用。如果之前存储的响应不再新鲜,则第一个请求将生成新的响应。如果在此期间有任何其他请求,他们将收到陈旧的回复。
HttpCache是一个简单的反向代理,它不打算替换清漆或鱿鱼。