DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5322>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5322

HttpResonseBase class sends headers with multiple field-values in a non HTTP compliant 
fashion.

           Summary: HttpResonseBase class sends headers with multiple field-
                    values in a non HTTP compliant fashion.
           Product: Tomcat 4
           Version: 4.0.1 Final
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Catalina
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Currently, if a servlet executes the following:

response.addIntHeader( "MyIntHeader", 2 );
response.addIntHeader( "MyIntHeader", 3 );

The response stream from the server will contain the following headers:
MyIntHeader: 2
MyIntHeader: 3

The above behavior appears to be inconsistent against what the HTTP 1.0 and 1.1
RFC's state (Section 4.2 Message Headers):

"Multiple HTTP_header fields with the same field-name may be present in a
message if and only if the entire field-value for that header field is defined
as a comma-separated list [i.e, #(values)].  It must be possible to combine
the multiple header fields into on "field-name: field-value" pair, without
changing the semantics of the message, by appending each sebsequent field-value
to the first, each separated by a comma".

I've include a patch that seems to resolve this in my env.  Several header tests
that I have run just fine with the patch applied.

************************************************************************
Index: HttpResponseBase.java
===================================================================
RCS file:
/home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseBase.java,v
retrieving revision 1.41
diff -u -r1.41 HttpResponseBase.java
--- HttpResponseBase.java   2001/12/03 19:55:04 1.41
+++ HttpResponseBase.java   2001/12/07 18:15:46
@@ -597,19 +597,22 @@

         // Send all specified headers (if any)
         synchronized (headers) {
-        Iterator names = headers.keySet().iterator();
-        while (names.hasNext()) {
-            String name = (String) names.next();
-            ArrayList values = (ArrayList) headers.get(name);
-            Iterator items = values.iterator();
-            while (items.hasNext()) {
-                String value = (String) items.next();
-                    outputWriter.print(name);
-                    outputWriter.print(": ");
+            Iterator names = headers.keySet().iterator();
+            while (names.hasNext()) {
+                String name = (String) names.next();
+                ArrayList values = (ArrayList) headers.get(name);
+                Iterator items = values.iterator();
+                outputWriter.print(name);
+                outputWriter.print(": ");
+                while (items.hasNext()) {
+                    String value = (String) items.next();
                     outputWriter.print(value);
-                    outputWriter.print("\r\n");
-                    // System.out.println(" " + name + ": " + value);
+                    if ( items.hasNext() ) {
+                        outputWriter.print(",");
+                    }
                 }
+                outputWriter.print("\r\n");
+                // System.out.println(" " + name + ": " + value);
             }
         }

******************************************************************************

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to