diff options
author | Evan Prodromou <evan@controlyourself.ca> | 2008-12-01 23:42:11 -0500 |
---|---|---|
committer | Evan Prodromou <evan@controlyourself.ca> | 2008-12-01 23:42:11 -0500 |
commit | be33850c5fceb418aec05fe537a85b7fe14f9bde (patch) | |
tree | 98b40d3b0f458781826a38240d72a5fc3b89386d | |
parent | cad6f78fe66e73665fe736cfe78d6633e1120ea7 (diff) |
add ETag handling
darcs-hash:20081202044211-5ed1f-d8779be7681fc21eebff3c0c56fdde892c2fa3da.gz
-rw-r--r-- | lib/action.php | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/lib/action.php b/lib/action.php index 754bbdbae..fc69efcce 100644 --- a/lib/action.php +++ b/lib/action.php @@ -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)); |