Answering my own question: I applied the fix mentioned in https://issues.apache.org/jira/browse/HTTPCLIENT-654 to httpclient version 3 and it now treats IPv6 address literals just as IPv6 literals are handled below.
On Wed, Nov 4, 2009 at 7:40 PM, Richard Achmatowicz < [email protected]> wrote: > Hello all > > I have a HttpClient v3 client interacting with a Tomcat server. Here is a > partial trace from the log: > > DEBUG [main] (?:?) - Open connection to 192.168.0.100:8080 > DEBUG [main] (?:?) - >> "GET /setattribute.jsp HTTP/1.1[\r][\n]" > DEBUG [main] (?:?) - Adding Host request header > DEBUG [main] (?:?) - >> "User-Agent: Jakarta > Commons-HttpClient/3.1[\r][\n]" > DEBUG [main] (?:?) - >> "Host: 192.168.0.100:8080[\r][\n]" > DEBUG [main] (?:?) - >> "[\r][\n]" > DEBUG [main] (?:?) - << "HTTP/1.1 200 OK[\r][\n]" > DEBUG [main] (?:?) - << "HTTP/1.1 200 OK[\r][\n]" > DEBUG [main] (?:?) - << "Server: Apache-Coyote/1.1[\r][\n]" > DEBUG [main] (?:?) - << "Set-Cookie: JSESSIONID=61Okk1z7KRtSdEM+3Msb4A**; > Path=/[\r][\n]" > DEBUG [main] (?:?) - << "Content-Type: > text/html;charset=ISO-8859-1[\r][\n]" > DEBUG [main] (?:?) - << "Content-Length: 167[\r][\n]" > DEBUG [main] (?:?) - << "Date: Wed, 04 Nov 2009 23:48:17 GMT[\r][\n]" > DEBUG [main] (?:?) - << "[\r][\n]" > DEBUG [main] (?:?) - Cookie accepted: "$Version=0; > JSESSIONID=61Okk1z7KRtSdEM+3Msb4A**; $Path=/" > Response status code: 200 > Present cookies: > Cookies: > - JSESSIONID=61Okk1z7KRtSdEM+3Msb4A** > Domain:192.168.0.100 > Path:/ > Date:null > DEBUG [main] (?:?) - << "<html>[\n]" > DEBUG [main] (?:?) - << "<body>[\n]" > DEBUG [main] (?:?) - << "<p>Storing session id in attribute with id: > 61Okk1z7KRtSdEM+3Msb4A**[\n]" > DEBUG [main] (?:?) - << "</body>[\n]" > DEBUG [main] (?:?) - << "</html>[\n]" > DEBUG [main] (?:?) - Resorting to protocol version default close connection > policy > DEBUG [main] (?:?) - Should NOT close connection, using HTTP/1.1 > DEBUG [main] (?:?) - Releasing connection back to connection manager. > DEBUG [main] (?:?) - >> "GET /getattribute.jsp HTTP/1.1[\r][\n]" > DEBUG [main] (?:?) - Adding Host request header > DEBUG [main] (?:?) - >> "User-Agent: Jakarta > Commons-HttpClient/3.1[\r][\n]" > DEBUG [main] (?:?) - >> "Host: 192.168.0.100:8080[\r][\n]" > DEBUG [main] (?:?) - >> "Cookie: $Version=0; > JSESSIONID=61Okk1z7KRtSdEM+3Msb4A**; $Path=/[\r][\n]" > DEBUG [main] (?:?) - >> "[\r][\n]" > DEBUG [main] (?:?) - << "HTTP/1.1 200 OK[\r][\n]" > DEBUG [main] (?:?) - << "HTTP/1.1 200 OK[\r][\n]" > DEBUG [main] (?:?) - << "Server: Apache-Coyote/1.1[\r][\n]" > DEBUG [main] (?:?) - << "X-Powered-By > DEBUG [main] (?:?) - << "Content-Type: > text/html;charset=ISO-8859-1[\r][\n]" > DEBUG [main] (?:?) - << "Content-Length: 122[\r][\n]" > DEBUG [main] (?:?) - << "Date: Wed, 04 Nov 2009 23:48:17 GMT[\r][\n]" > DEBUG [main] (?:?) - << "[\r][\n]" > Response status code: 200 > Present cookies: > Cookies: > - JSESSIONID=61Okk1z7KRtSdEM+3Msb4A** > Domain:192.168.0.100 > Path:/ > Date:null > DEBUG [main] (?:?) - << "<p>Retrieve the session id from attribute:[\n]" > DEBUG [main] (?:?) - << "61Okk1z7KRtSdEM+3Msb4A**</p>" > > As you can see, a cookie is exchanged between the server and the client, > and then the client sends the cooke back to the server when it calls > getattribute.jsp to retrieve the attribute value set earlier. > > Here is my understanding: > (i) in the first interaction, the server does not assign a domain to the > cookie in its Set-Cookie header > > DEBUG [main] (?:?) - << "Set-Cookie: JSESSIONID=61Okk1z7KRtSdEM+3Msb4A**; > Path=/[\r][\n]" > > (ii) in the first interaction, HttpClient receives the Set-Cookie header, > finds with no domain, and so assings the domain to be the hostname of the > server (taken from the URL) > > Present cookies: > Cookies: > - JSESSIONID=61Okk1z7KRtSdEM+3Msb4A** > Domain:192.168.0.100 > Path:/ > Date:null > > (iii) in the second interaction, the client looks for cookies with the same > domain as the hostname in the URL and finds a match and so sends the cookie > along with the request > > DEBUG [main] (?:?) - >> "Cookie: $Version=0; > JSESSIONID=61Okk1z7KRtSdEM+3Msb4A**; $Path=/[\r][\n]" > > So it seems to me that, in the absence of hostnames bsing used in URLs, > HttpClient can handle IP literal names and use them as domain names, > setting, matching, etc. > > I need to do exactly the same thing with IPv6 literal addresses. However, > when I run the same program with IPv6 addreesses, cookies are thrown out. > For example: > > 2009-10-21 16:30:56,002 WARN [org.apache.commons.httpclient.HttpMethodBase] > Cookie rejected: "$Version=0; JSESSIONID=AQYACiGZiyqiFpeNHDA1Ug**; $Path=/". > Illegal domain attribute "[fec0". Domain of origin: "[fec0:0:a16:ffff::11]" > > My question: is it possible *in any way* to use IPv6 literals as domain > names as was done above for IPv4 (e.g. by using a less stringent cooking > management policy)? It's rather natural to want to use IPv6 literals in > URLs.... > > Or is it always required to use domain names (e.g fully qualified host > names) when working with HttpClient and IPv6 addresses? > > Does the same situation exist with HttpClient v4? > > Thanks for your help ! > > Richard > >
