Tôi có câu hỏi về cách xem bộ đệm ẩn và bộ nhớ đệm trình duyệt hoạt động cùng nhau trong CakePHP 2.1.CakePHP 2.1: Bộ nhớ cache của trình duyệt vs Xem bộ nhớ cache
Tôi vừa mới nâng cấp ứng dụng của tôi để CakePHP 2.1, và thiết lập HTTP bộ nhớ đệm bằng cách sử dụng $this->response->modified
phương pháp mới (mà hoạt động tốt):
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'));
}
}
Tôi cũng đã thiết lập CakePHP xem bộ nhớ đệm:
class ArticlesController extends AppController {
public $cacheAction = array(
'view' => array('callbacks' => true, 'duration' => "1 week"),
}
}
Cả hai đều hoạt động tốt khi được sử dụng độc lập. Tuy nhiên, khi cả hai được bật, chế độ xem bộ đệm CakePHP dường như ghi đè bộ đệm ẩn của trình duyệt (cụ thể là không có tiêu đề Last-Modified
được gửi khi các trang được phân phát từ bộ nhớ cache của khung nhìn CakePHP). Thao tác này sẽ dừng trình duyệt khỏi các trang đệm đang được phân phối từ bộ nhớ cache của CakePHP. Lý tưởng nhất, tôi muốn trình duyệt lưu các trang ngay cả khi chúng được phục vụ từ bộ nhớ cache của CakePHP (nghĩa là tôi muốn CakePHP trả về tiêu đề Last-Modified
và phản hồi tiêu đề yêu cầu If-Modified-Since
của trình duyệt, bất kể CakePHP có trả về một bản sao của trang được lưu trong bộ nhớ cache).
Tôi chỉ tự hỏi liệu đây có phải là hành vi được mong đợi hay không, cho dù tôi đang làm điều gì đó sai, hay là điều gì đó chưa được xem xét (hoặc không được cho là quan trọng).
Có, mọi sửa đổi đối tượng Phản hồi được thực hiện bởi tác vụ Bộ điều khiển sẽ không được lưu trong bộ nhớ cache, điều này bao gồm cài đặt của tiêu đề Kiểm soát bộ nhớ cache. Có một vé mở về điều này (mặc dù không phải Caching liên quan): http://cakephp.lighthouseapp.com/projects/42648/tickets/2358-cachehelper-defect-with-response Cách giải quyết được đề xuất chỉ là đặt tiêu đề theo cách thủ công trong bố cục hoặc 'Controller :: beforeFilter()' (với tính năng gọi lại được kích hoạt). – pixelistik