Remove conditional headers from the re-played request.
authorbillbarker <billbarker@13f79535-47bb-0310-9956-ffa450edef68>
Sat, 24 Nov 2007 01:37:36 +0000 (01:37 +0000)
committerbillbarker <billbarker@13f79535-47bb-0310-9956-ffa450edef68>
Sat, 24 Nov 2007 01:37:36 +0000 (01:37 +0000)
These confuse some UAs (notably FireFox), and we can't really keep them from the HTTP/1.1 spec.

Fix for bug #43687
Reported By:   Przemyslaw Madzik

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@597781 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/authenticator/FormAuthenticator.java

index 62bf5ee..3da730f 100644 (file)
@@ -402,12 +402,20 @@ public class FormAuthenticator
 
         MimeHeaders rmh = request.getCoyoteRequest().getMimeHeaders();
         rmh.recycle();
+        boolean cachable = "GET".equalsIgnoreCase(saved.getMethod()) ||
+                           "HEAD".equalsIgnoreCase(saved.getMethod());
         Iterator names = saved.getHeaderNames();
         while (names.hasNext()) {
             String name = (String) names.next();
-            Iterator values = saved.getHeaderValues(name);
-            while (values.hasNext()) {
-                rmh.addValue(name).setString( (String)values.next() );
+            // The browser isn't expecting this conditional reposponse now.
+            // Assuming that it can quietly recover from an unexpected 412.
+            // BZ 43687
+            if(!("If-Modified-Since".equalsIgnoreCase(name) ||
+                 (cachable && "If-None-Match".equalsIgnoreCase(name)))) {
+                Iterator values = saved.getHeaderValues(name);
+                while (values.hasNext()) {
+                    rmh.addValue(name).setString( (String)values.next() );
+                }
             }
         }