私は、CakePHP 2.1でビューキャッシュとブラウザキャッシングがどのように連携するかについて質問があります。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ビューのキャッシュはブラウザのキャッシュをオーバーライドするように見えます(具体的には、CakePHPビューキャッシュからページが提供されるときにはLast-Modified
ヘッダーは送信されません)。これにより、ブラウザは、CakePHPのビューキャッシュから提供されているページをキャッシュするのを止めます。
理想的には、私は彼らがCakePHPのキャッシュから提供されている場合でも、キャッシュページにブラウザをしたいと思います(つまり、私は、CakePHPは関係なく、CakePHPがされているかどうかの、Last-Modified
ヘッダを返し、ブラウザのIf-Modified-Since
リクエストヘッダに対応したいと思いますキャッシュされたページのコピーを返すかどうか)。
私は何か間違っているのかどうか、それが考慮されていない(または重要ではないと思われる)ものかどうか、これが期待される動作かどうか疑問に思っています。
はい、コントローラアクションによって行われたレスポンスオブジェクトの変更はキャッシュされません。これには、キャッシュコントロールヘッダーの設定も含まれます。これに関する公開チケットがあります(キャッシュ関連ではありません):http://cakephp.lighthouseapp.com/projects/42648/tickets/2358-cachehelper-defect-with-response 唯一の推奨される回避策は、レイアウトまたは 'Controller :: beforeFilter()'(コールバックが有効) – pixelistik