harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mark Hindess (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-6452) HttpUrlConnection converts request headers to lowercase - HttpUrlConnection.addRequestProperty overrides existing properties
Date Fri, 19 Feb 2010 20:10:27 GMT

    [ https://issues.apache.org/jira/browse/HARMONY-6452?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835928#action_12835928
] 

Mark Hindess commented on HARMONY-6452:
---------------------------------------

Michael, thanks for your suggested fix.  It is preferable to submit a patch rather than a
complete replacement - see http://harmony.apache.org/get-involved.html#Guidelines%20on%20how%20to%20Create%20and%20Submit%20a%20Patch
- but I'm happy to work with the attached copy for now.

With your patch some simple cases seem to produce odd behaviour, such as:

        conn.setRequestProperty("KEY", "upper");
        conn.setRequestProperty("key", "lower");
        System.out.println("KEY=" + conn.getRequestProperty("KEY"));
        System.out.println("key=" + conn.getRequestProperty("key"));
        System.out.println("properties=" + conn.getRequestProperties()); 

produces output:

   KEY=lower
   key=lower
   properties={KEY=[upper]}

and also:

        conn.setRequestProperty("key", "lower");
        conn.setRequestProperty("KEY", "upper");
        System.out.println("KEY=" + conn.getRequestProperty("KEY"));
        System.out.println("key=" + conn.getRequestProperty("key"));
        System.out.println("properties=" + conn.getRequestProperties()); 

produces:

  KEY=upper
  key=upper
  properties={KEY=[upper], key=[lower]}

So it is still not quite right.  Having said that, I wonder if perhaps we are aiming for the
wrong solution here.  The reference implementation seems rather inconsistent so I wonder if
it is really worth trying to match its behaviour other than meeting the spec.

I've raised this on the dev list to try to get consensus on the way to fix this and to see
if anyone can makes sense of the reference implementation behaviour.  See:

  http://markmail.org/thread/3lyqkyg3oxyeithc

Please join that discussion and we can summarize any conclusions on this JIRA.  In the meantime,
I'll continue to investigate.




> HttpUrlConnection converts request headers to lowercase - HttpUrlConnection.addRequestProperty
overrides existing properties
> ----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-6452
>                 URL: https://issues.apache.org/jira/browse/HARMONY-6452
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>         Environment: Android 1.6
>            Reporter: Michael Andresen
>            Assignee: Mark Hindess
>         Attachments: descriptions.txt, Header.java
>
>
> Problem: Lower-Case-Headers
> ==============================
> In Sun's JRE this code
> 	java.net.HttpURLConnection conn = (java.net.HttpURLConnection)(new java.net.URL("http://...").openConnection());
> 	conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=...");
> 	System.out.println (conn.getRequestProperty("content-type"));
> 	System.out.println (conn.getRequestProperties());
> produces the following output:
> 	multipart/form-data; boundary=...
> 	{Content-Type=[multipart/form-data; boundary=...]}
> The Property-Name "Content-Type" is stored case sensitive but it can be fetched in lower-case.
> The resulting Request-Header sent to the Web-Server is case sensitive.
> On Android 1.6 (which uses Apache Harmony) the same Code produces the following output:
> 	multipart/form-data; boundary=...
> 	{content-type=[multipart/form-data; boundary=...]}
> This time the Property-Name "Content-Type" is stored in lower-case. The resulting Request-Header
is also sent in lower-case. That's a violation of the HTTP 1.1 spec, and certain service providers
may ignore such Request-Headers.
> In harmony 5.0 r901653 the output is the same as on Android 1.6 but the resulting Request-Header
is sent case-sensitive.
> Problem addRequestProperty overrides existing properties
> ==============================================
> Existing Properties should be appended.
> Example
> ==============================================
> 	HttpURLConnection conn = (HttpURLConnection)(new URL("http://www.example.com/index.html").openConnection());
> 	conn.setRequestProperty("Content-Disposition", "Content-Disposition: form-data");
> 	conn.addRequestProperty("Content-Disposition", "name=\"file\"");
> 	conn.addRequestProperty("Content-Disposition", "filename=\"test.html\"");
> 	conn.setRequestProperty("a", "1");
> 	conn.addRequestProperty("a", "2");
> 	System.out.println ("Single Property: "+conn.getRequestProperty("content-disposition"));
> 	System.out.println ("All Properties:");
> 	for (Map.Entry<String, List<String>> entry : conn.getRequestProperties().entrySet())
{
> 		System.out.print ("  Property: "+entry.getKey()+" = {");
> 		for (String v : entry.getValue())
> 			System.out.print (v+";");
> 		System.out.println ("}");
> 	}
> Should produce the following output:
> 	Single Property: filename="test.html"
> 	All Properties:
> 	  Property: a = {2;1;}
> 	  Property: Content-Disposition = {filename="test.html";name="file";Content-Disposition:
form-data;}
> But the following output is produced:
> 	Single Property: filename="test.html"
> 	All Properties:
> 	  Property: content-disposition = {filename="test.html";}
> 	  Property: a = {2;}
> I have set the Property "a" in lower-case to make clear, that this problem is depends
on the lower-case headers problem.
> Info
> ==============================================
> The class org.apache.harmony.luni.internal.net.www.protocol.http.Header is not correct
implemented. It only works with lower-case property-names and each property-value can only
contain one entry.
> Question
> ==============================
> 1. Does anybody know how to find out which version of harmony is used by Android 1.6?
I tried System.getProperties() but that didn't help.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message