我有一个关于视图缓存和浏览器缓存在CakePHP 2.1中一起工作的问题。CakePHP 2.1:浏览器缓存vs查看缓存
我刚刚升级我的应用程序CakePHP的2.1,并使用新的方法$this->response->modified
(效果很好)设置HTTP缓存:
class ArticlesController extends AppController {
public function view($id) {
$article = $this->Article->find(
'first',
array('conditions' => array('Article.id' => $id))
);
$this->response->modified($article['Article']['modified']);
$this->set(compact('article'));
}
}
我还建立了CakePHP的视图缓存:
class ArticlesController extends AppController {
public $cacheAction = array(
'view' => array('callbacks' => true, 'duration' => "1 week"),
}
}
两者独立使用时均可正常工作。但是,如果两者都启用,则CakePHP视图缓存似乎会覆盖浏览器缓存(具体而言,从CakePHP视图缓存提供页面时,不会发送Last-Modified
头)。这会阻止浏览器缓存由CakePHP的视图缓存提供的页面。
理想情况下,我想浏览器,即使它们被从CakePHP的缓存中的高速缓存页(也就是我想的CakePHP返回一个Last-Modified
头,以及浏览器的If-Modified-Since
请求头回应,不管CakePHP的是否有被是否返回缓存的页面副本)。
我只是想知道这是否是预期的行为,我是否做错了什么,或者它是否没有被考虑过(或者没有被认为是重要的)。
是的,由Controller动作对Response对象所做的任何修改都不会被缓存,这包括Cache控制头的设置。有一个关于此的开放票(虽然没有与缓存相关):http://cakephp.lighthouseapp.com/projects/42648/tickets/2358-cachehelper-defect-with-response 唯一建议的解决方法是手动设置标题布局或'Controller :: beforeFilter()'(启用回调)。 – pixelistik 2012-06-24 14:21:51