我对 CakePHP 2.1 中视图缓存和浏览器缓存的协同工作方式有疑问。
我刚刚将我的应用程序升级到 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 视图缓存似乎会覆盖浏览器缓存(具体来说,Last-Modified
当页面从 CakePHP 视图缓存提供时,不会发送任何标题)。这会阻止浏览器缓存从 CakePHP 的视图缓存提供的页面。
理想情况下,我希望浏览器缓存页面,即使它们是从 CakePHP 的缓存提供的(即,我希望 CakePHP 返回一个Last-Modified
标头,并响应浏览器的If-Modified-Since
请求标头,无论 CakePHP 是否返回一个缓存的页面副本或不)。
我只是想知道这是否是预期的行为,是否我做错了什么,或者它是否没有被考虑(或被认为不重要)。