From be33850c5fceb418aec05fe537a85b7fe14f9bde Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 1 Dec 2008 23:42:11 -0500 Subject: [PATCH] add ETag handling darcs-hash:20081202044211-5ed1f-d8779be7681fc21eebff3c0c56fdde892c2fa3da.gz --- lib/action.php | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/action.php b/lib/action.php index 754bbdbae8..fc69efcce3 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));