You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Mark Hindess (JIRA)" <ji...@apache.org> on 2010/02/21 15:07:28 UTC

[jira] Resolved: (HARMONY-6452) HttpUrlConnection converts request headers to lowercase - HttpUrlConnection.addRequestProperty overrides existing properties

     [ https://issues.apache.org/jira/browse/HARMONY-6452?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mark Hindess resolved HARMONY-6452.
-----------------------------------

       Resolution: Fixed
    Fix Version/s: 5.0M13
                   6.0M1

I've committed fixes and regression tests for all the issues covered by this JIRA in r912351.  Thanks to elliot for his input on the dev@ list.

Michael, I didn't use your fix but I think I've covered everything with the two commits.  Can you confirm that this is the case by closing this JIRA.  (Or add further comments if I've missed something.)

Many thanks,
 Mark.

> 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
>             Fix For: 6.0M1, 5.0M13
>
>         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.