Details
Description
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=...
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=...
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()" =
");
}
Should produce the following output:
Single Property: filename="test.html"
All Properties:
Property: a =
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 =
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.
On the left of the web page for this JIRA, there should be an "Attach file" item under the "Operations" section on the left-hand side. You should use this to attach a patch ... be sure to tick the "Grant license to ASF for inclusion in ASF works" in order that we may use your contribution and it might be an idea to read:
http://harmony.apache.org/contribution_policy.html
Thanks,
Mark