r3926 render_image.php: add IMS stuff
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 7 Sep 2010 12:58:22 +0000 (12:58 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 7 Sep 2010 12:58:22 +0000 (12:58 +0000)
ChangeLog
render_image.php

index ba44b3e36a381353398396748bc664a28fedab1d..709309d3dc36ad19c7fdd08147b7367f808d9310 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@
        bugfix: speed up IPv4 VLAN selector (by Boris Lytochkin)
        bugfix: suppress inputs borders in MSIE (by Alexey Andrianov)
        update: allow scrollbars in port selector (#361)
+       new feature: enable IMS caching of progress bars (by Alexey Andrianov)
 0.18.4 2010-07-13
        bugfix: a race condition could be triggered in permissions editor
        new feature: "any mode" of user port in VLAN switch template
index 8a21856555edeca62d1f195b333a7ea5e255b83d..3fa4e2df61b89d7bc7fbb4ffa356a0b93cf6894c 100644 (file)
@@ -1,5 +1,23 @@
 <?php
 
+define ('CACHE_DURATION', 604800); // 7 * 24 * 3600
+if ( // 'progressbar's never change, force cache hit before loading init.php
+       isset ($_SERVER['HTTP_IF_MODIFIED_SINCE'])
+       && $_REQUEST['img'] == 'progressbar'
+)
+{
+       $client_time = strtotime ($_SERVER['HTTP_IF_MODIFIED_SINCE']);
+       if ($client_time !== FALSE && $client_time !== -1) // readable
+       {
+               $server_time = time();
+               // not in future and not yet expired
+               if ($client_time <= $server_time && $client_time + CACHE_DURATION >= $server_time)
+               {
+                       header ('Last-Modified: ' . $_SERVER['HTTP_IF_MODIFIED_SINCE'], TRUE, 304);
+                       exit;
+               }
+       }
+}
 
 ob_start();
 try {
@@ -20,6 +38,9 @@ switch ($_REQUEST['img'])
                break;
        case 'progressbar': // no security context
                assertUIntArg ('done', TRUE);
+               // 'progressbar's never change, make browser cache the result
+               header ('Cache-Control: private, max-age=' . CACHE_DURATION . ', pre-check=' . CACHE_DURATION);
+               header ('Last-Modified: ' . date (DATE_RFC1123, time()));
                renderProgressBarImage ($_REQUEST['done']);
                break;
        case 'preview': // file security context