CakePHP2.1:浏览器缓存与视图缓存

CakePHP2.1:浏览器缓存与视图缓存,cakephp,caching,http-headers,cakephp-2.1,Cakephp,Caching,Http Headers,Cakephp 2.1,我有一个关于视图缓存和浏览器缓存在CakePHP2.1中协同工作的问题 我刚刚将我的应用程序升级到CakePHP 2.1,并使用新的$this->response->modified方法设置了HTTP缓存(效果很好): 我还设置了CakePHP视图缓存: class ArticlesController extends AppController { public $cacheAction = array( 'view' => array('callbacks' =

我有一个关于视图缓存和浏览器缓存在CakePHP2.1中协同工作的问题

我刚刚将我的应用程序升级到CakePHP 2.1,并使用新的
$this->response->modified
方法设置了HTTP缓存(效果很好):

我还设置了CakePHP视图缓存:

class ArticlesController extends AppController {
    public $cacheAction = array(
        'view' => array('callbacks' => true, 'duration' => "1 week"),
    }
}
两者单独使用时都能很好地工作。但是,当两者都启用时,CakePHP视图缓存似乎会覆盖浏览器缓存(特别是,当从CakePHP视图缓存提供页面时,不会发送上次修改的
头)。这将阻止浏览器缓存CakePHP视图缓存提供的页面

理想情况下,我希望浏览器缓存页面,即使这些页面是从CakePHP的缓存中提供的(即,我希望CakePHP返回
上次修改的
头,并在自
请求头修改后响应浏览器的
,而不管CakePHP是否已返回页面的缓存副本)


我只是想知道这是否是预期的行为,我是否做错了什么,或者这是否是未被考虑(或认为不重要)的事情。

视图缓存本质上并不是对每个请求都执行控制器的方法。我猜它只执行一次操作,然后将输出缓存到磁盘(或者,您正在使用的任何缓存引擎)。如果可以,您可以看到缓存视图是如何构造的


$file='是的,控制器操作对响应对象所做的任何修改都不会被缓存,这包括缓存控制头的设置。关于这一点有一个公开的问题(尽管与缓存无关):唯一建议的解决方法是在布局或
Controller::beforeFilter()
(启用回调)中手动设置标题。
class ArticlesController extends AppController {
    public $cacheAction = array(
        'view' => array('callbacks' => true, 'duration' => "1 week"),
    }
}