1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
protected function _setCachingHeaders(){
if ($this->_request->getHeader('IF-MODIFIED-SINCE')) {
$this->_response->setHttpResponseCode(304);
return;
}
$hashID = sha1($this->_response->getBody());
$headers = apache_request_headers();
$lastChangeTime = 1347527410; # 13/09/12 09:10:10
$expireTime = 7200; # seconds (2 hours)
$this->_response->clearHeaders();
$this->_response->setHeader('Cache-Control', 'max-age=' . $expireTime, true);
$this->_response->setHeader('Expires', gmdate('D, d M Y H:i:s', time() + $expireTime) . ' GMT', true);
$this->_response->setHeader('Pragma', 'public', true);
$this->_response->setHeader('Last-Modified', gmdate('D, d M Y H:i:s', time()) . ' GMT', true);
$this->_response->setHeader('ETag', $hashID, true); # Etag Helps browsers determine if page has been changed
# check in different ways if page has changed
$if_modified_since = strtotime(preg_replace('/;.*$/','',$_SERVER["HTTP_IF_MODIFIED_SINCE"]));
$pageWasUpdated = !(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) == $lastChangeTime);
$doIDsMatch = (isset($_SERVER["HTTP_IF_NONE_MATCH"]) && strpos($_SERVER["HTTP_IF_NONE_MATCH"], $hashID) !== false);
if (($if_modified_since >= $lastChangeTime) || !$pageWasUpdated || $doIDsMatch){
$this->_response->setHttpResponseCode(304);
$this->_response->setHeader('Connection', 'close');
$front = Zend_Controller_Front::getInstance();
$front->returnResponse(false);
$this->_response->sendHeaders(); # send headers
} else {
$this->_response->setHttpResponseCode(200);
# Tell the browser which size the content
$this->_response->setHeader('Content-Length', mb_strlen($this->_response->getBody(), 'latin1'));
}
} |
Partager