revert output buffering (costly) for ETags (low priority)

This commit is contained in:
Evan Prodromou 2009-09-23 09:33:40 -04:00
parent c01a5b8f2e
commit 42ba05de5f
2 changed files with 6 additions and 37 deletions

View File

@ -233,7 +233,7 @@ function main()
try {
if ($action_obj->prepare($args)) {
$action_obj->handleWrapper($args);
$action_obj->handle($args);
}
} catch (ClientException $cex) {
$cac = new ClientErrorAction($cex->getMessage(), $cex->getCode());

View File

@ -873,29 +873,28 @@ class Action extends HTMLOutputter // lawsuit
}
/**
* Wrapper for the handle method that handles etags, last-modified, and other conditional headers
* Handler method
*
* @param array $argarray is ignored since it's now passed in in prepare()
*
* @return boolean is read only action?
*/
function handleWrapper($argarray=null)
function handle($argarray=null)
{
header('Vary: Accept-Encoding,Cookie,Accept-Language,Authorization');
header("Cache-Control: must-revalidate");
header('Vary: Accept-Encoding,Cookie');
$lm = $this->lastModified();
$etag = $this->etag();
if ($etag) {
header('ETag: ' . $etag);
}
$if_none_match = (array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER)) ?
$_SERVER['HTTP_IF_NONE_MATCH'] : null;
if ($lm) {
header('Last-Modified: ' . date(DATE_RFC1123, $lm));
if (array_key_exists('HTTP_IF_MODIFIED_SINCE', $_SERVER)) {
$if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
$ims = strtotime($if_modified_since);
if ($lm <= $ims) {
$if_none_match = (array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER)) ?
$_SERVER['HTTP_IF_NONE_MATCH'] : null;
if (!$if_none_match ||
!$etag ||
$this->_hasEtag($etag, $if_none_match)) {
@ -906,36 +905,6 @@ class Action extends HTMLOutputter // lawsuit
}
}
}
if($etag) {
$ret = $this->handle($argarray);
}else{
ob_start();
$ret = $this->handle($argarray);
$output = ob_get_contents();
ob_end_clean();
//deep etag
$etag = md5($output);
header('ETag: ' . $etag);
if($if_none_match && $this->_hasEtag($etag, $if_none_match)) {
header('HTTP/1.1 304 Not Modified');
// Better way to do this?
exit(0);
}
header('Content-Length: '.strlen($output));
print $output;
}
return $ret;
}
/**
* Handler method
*
* @param array $argarray is ignored since it's now passed in in prepare()
*
* @return boolean is read only action?
*/
function handle($argarray=null)
{
}
/**