diff options
-rw-r--r-- | program/include/rcube_shared.inc | 16 | ||||
-rw-r--r-- | program/steps/mail/show.inc | 6 |
2 files changed, 13 insertions, 9 deletions
diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc index c9cf4fbbf..f3ff0aa02 100644 --- a/program/include/rcube_shared.inc +++ b/program/include/rcube_shared.inc @@ -236,18 +236,22 @@ function send_future_expire_header($offset=2600000) * @param int Modified date as unix timestamp * @param string Etag value for caching */ -function send_modified_header($mdate, $etag=null) +function send_modified_header($mdate, $etag=null, $skip_check=false) { if (headers_sent()) return; $iscached = false; - if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $mdate) - $iscached = true; - $etag = $etag ? "\"$etag\"" : null; - if ($etag) - $iscached = ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag); + + if (!$skip_check) + { + if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $mdate) + $iscached = true; + + if ($etag) + $iscached = ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag); + } if ($iscached) header("HTTP/1.x 304 Not Modified"); diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index 1fe4aa9b4..a530184d8 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -30,7 +30,7 @@ if ($_GET['_uid']) // set message charset as default if (!empty($MESSAGE['headers']->charset)) $IMAP->set_charset($MESSAGE['headers']->charset); - + // go back to list if message not found (wrong UID) if (!$MESSAGE['headers']) { @@ -53,13 +53,13 @@ if ($_GET['_uid']) $mbox_name = $IMAP->get_mailbox_name(); // calculate Etag for this request - $etag = md5($MESSAGE['UID'].$mbox_name.session_id().intval($MESSAGE['headers']->mdn_sent).intval($MESSAGE['headers']->seen).intval($MESSAGE['is_safe']).intval($PRINT_MODE)); + $etag = md5($MESSAGE['UID'].$mbox_name.session_id().intval($MESSAGE['headers']->mdn_sent).intval($MESSAGE['is_safe']).intval($PRINT_MODE)); // allow caching, unless remote images are present if ((bool)$MESSAGE['is_safe']) send_nocacheing_headers(); else if (empty($CONFIG['devel_mode'])) - send_modified_header($_SESSION['login_time'], $etag); + send_modified_header($_SESSION['login_time'], $etag, !$MESSAGE['headers']->seen); $MESSAGE['subject'] = rcube_imap::decode_mime_string($MESSAGE['headers']->subject, $MESSAGE['headers']->charset); $OUTPUT->set_pagetitle($MESSAGE['subject']); |