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.