add ETag handling

darcs-hash:20081202044211-5ed1f-d8779be7681fc21eebff3c0c56fdde892c2fa3da.gz
This commit is contained in:
Evan Prodromou 2008-12-01 23:42:11 -05:00
parent cad6f78fe6
commit be33850c5f
1 changed files with 18 additions and 3 deletions

View File

@ -40,6 +40,10 @@ class Action { // lawsuit
return NULL;
}
function etag() {
return NULL;
}
function is_readonly() {
return false;
}
@ -62,6 +66,11 @@ class Action { // lawsuit
function handle($argarray=NULL) {
$lm = $this->last_modified();
$etag = $this->etag();
if ($etag) {
header('ETag: ' . $etag);
}
if ($lm) {
header('Last-Modified: ' . date(DATE_RFC822, $lm));
@ -69,14 +78,20 @@ class Action { // lawsuit
if ($if_modified_since) {
$ims = strtotime($if_modified_since);
if ($lm <= $ims) {
header('HTTP/1.1 304 Not Modified');
# Better way to do this?
exit(0);
if (!$etag || $this->_has_etag($etag, $_SERVER['HTTP_IF_NONE_MATCH'])) {
header('HTTP/1.1 304 Not Modified');
# Better way to do this?
exit(0);
}
}
}
}
}
function _has_etag($etag, $if_none_match) {
return ($if_none_match) && in_array($etag, explode(',', $if_none_match));
}
function boolean($key, $def=false) {
$arg = strtolower($this->trimmed($key));