diff --git a/lib/exe/css.php b/lib/exe/css.php
index 061df662d9cccb58e20f54ffc4539e1167dfea2c..ad47647f0deb161455a84399bc5a4e6dda7284f7 100644
--- a/lib/exe/css.php
+++ b/lib/exe/css.php
@@ -67,10 +67,15 @@ function css_out(){
         $files[DOKU_CONF.'userstyle.css'] = '';
     }
 
-    // check cache age 
+    // check cache age & handle conditional request
+    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+    header('Pragma: public');
     if(css_cacheok($cache,array_keys($files))){
+        http_conditionalRequest(filemtime($cache));
         readfile($cache);
         return;
+    } else {
+        http_conditionalRequest(time());
     }
 
     // start output buffering and build the stylesheet
diff --git a/lib/exe/js.php b/lib/exe/js.php
index 9cc4a863c3918c7b99fb2c848ff29ba67ca88b65..0615db3741d9cce61ed1bbe30cc0b33100baadef 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -55,10 +55,15 @@ function js_out(){
     // get possible plugin scripts
     $plugins = js_pluginscripts();
 
-    // check cache age here
+    // check cache age & handle conditional request
+    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+    header('Pragma: public');
     if(js_cacheok($cache,array_merge($files,$plugins))){
+        http_conditionalRequest(filemtime($cache));
         readfile($cache);
         return;
+    } else {
+        http_conditionalRequest(time());
     }
 
     // start output buffering and build the script