Ausgabe des Contents bei 304 unterdrückt
[percentcodec] / cachecontrol / src / main / java / de / halbekunst / juplo / cachecontrol / AcceleratorFilter.java
index 63edfb5..f17ec8d 100644 (file)
@@ -67,8 +67,13 @@ public class AcceleratorFilter implements Filter {
     AccelerationWrapper wrapper = new AccelerationWrapper(httpRequest, httpResponse);
     httpRequest.setAttribute(RESPONSE_WRAPPER, wrapper);
     cacheControl.init(wrapper);
-    chain.doFilter(request, wrapper);
-    wrapper.finish();
+    try {
+      chain.doFilter(request, wrapper);
+      wrapper.finish();
+    }
+    catch (NotModifiedException nm) {
+      log.trace("Not modified: {}", httpRequest.getRequestURI());
+    }
   }
 
   @Override
@@ -644,8 +649,14 @@ public class AcceleratorFilter implements Filter {
           out().write(buffer);
           committed = true;
           /** Dekoration nur beim ersten Schreib-Schub anstoßen */
-          if (pos == size)
-            cacheControl.decorate(request, response);
+          if (pos == size) {
+            if (!cacheControl.decorate(request, response)) {
+              zipped = false;
+              os = null;
+              pos = 0;
+              throw new NotModifiedException();
+            }
+          }
           pos = 0;
         }
         buffer[pos++] = (byte) i;
@@ -659,8 +670,14 @@ public class AcceleratorFilter implements Filter {
 
         committed = true;
         /** Dekoration nur beim ersten Schreib-Schub anstoßen */
-        if (pos == size)
-          cacheControl.decorate(request, response);
+        if (pos == size) {
+          if (!cacheControl.decorate(request, response)) {
+            zipped = false;
+            os = null;
+            pos = 0;
+            throw new NotModifiedException();
+          }
+        }
         out().write(buffer, 0, pos);
         out().flush();
         pos = 0;
@@ -671,7 +688,8 @@ public class AcceleratorFilter implements Filter {
         if (size == 0) {
           committed = true;
           zipped = false;
-          cacheControl.decorate(request, response);
+          if (!cacheControl.decorate(request, response))
+            throw new NotModifiedException();
           sos.close();
         }
         else {
@@ -682,3 +700,5 @@ public class AcceleratorFilter implements Filter {
     }
   }
 }
+
+class NotModifiedException extends IOException {}
\ No newline at end of file