On 13/08/2010 11:52, Hans Wahn wrote: > Thanks for looking into this issue. > >> What is the exact header & body of the 302 redirect from Tomcat in #2? > > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - << "HTTP/1.1 302 Moved > Temporarily[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - << "Server: > Apache-Coyote/1.1[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - << "Location: > http://localhost:8080/test/secure/[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - << "Content-Length: 0[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - << "Date: Thu, 12 Aug 2010 > 18:20:17 GMT[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - << "[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] headers - << HTTP/1.1 302 Moved > Temporarily > 2010/08/12 20:20:17:750 CEST [DEBUG] headers - << Server: Apache-Coyote/1.1 > 2010/08/12 20:20:17:750 CEST [DEBUG] headers - << Location: > http://localhost:8080/test/secure/ > 2010/08/12 20:20:17:750 CEST [DEBUG] headers - << Content-Length: 0 > 2010/08/12 20:20:17:750 CEST [DEBUG] headers - << Date: Thu, 12 Aug > 2010 18:20:17 GMT > > >> Given that the client performs steps 3 & 4, can you check what's being >> *sent* by the client, not what's being received by Tomcat? > > Client sent data step3 (request redirect uri): > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - >> "POST /test/secure/ > HTTP/1.1[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - >> "Content-Length: 18[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - >> "Content-Type: > application/x-www-form-urlencoded; charset=UTF-8[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - >> "Host: localhost:8080[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - >> "Connection: Keep-Alive[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - >> "User-Agent: > Apache-HttpClient/4.0.1 (java 1.5)[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - >> "Expect: 100-Continue[EOL]" > 2010/08/12 20:20:17:750 CEST [DEBUG] wire - >> "Cookie: > JSESSIONID=DA224C1B02E94524187858267D70A830[EOL]" > 2010/08/12 20:20:17:765 CEST [DEBUG] wire - >> "Cookie2: $Version=1[EOL]" > 2010/08/12 20:20:17:765 CEST [DEBUG] wire - >> "[EOL]" > 2010/08/12 20:20:17:765 CEST [DEBUG] headers - >> POST /test/secure/ HTTP/1.1 > 2010/08/12 20:20:17:765 CEST [DEBUG] headers - >> Content-Length: 18 > 2010/08/12 20:20:17:765 CEST [DEBUG] headers - >> Content-Type: > application/x-www-form-urlencoded; charset=UTF-8 > 2010/08/12 20:20:17:765 CEST [DEBUG] headers - >> Host: localhost:8080 > 2010/08/12 20:20:17:765 CEST [DEBUG] headers - >> Connection: Keep-Alive > 2010/08/12 20:20:17:765 CEST [DEBUG] headers - >> User-Agent: > Apache-HttpClient/4.0.1 (java 1.5) > 2010/08/12 20:20:17:765 CEST [DEBUG] headers - >> Expect: 100-Continue > 2010/08/12 20:20:17:765 CEST [DEBUG] headers - >> Cookie: > JSESSIONID=DA224C1B02E94524187858267D70A830 > 2010/08/12 20:20:17:765 CEST [DEBUG] headers - >> Cookie2: $Version=1 > 2010/08/12 20:20:17:781 CEST [DEBUG] wire - << "HTTP/1.1 100 Continue[EOL]" > 2010/08/12 20:20:17:781 CEST [DEBUG] wire - << "[EOL]" > 2010/08/12 20:20:17:781 CEST [DEBUG] headers - << HTTP/1.1 100 Continue > 2010/08/12 20:20:17:781 CEST [DEBUG] wire - >> "testName=testValue" > 2010/08/12 20:20:17:781 CEST [DEBUG] wire - << "HTTP/1.1 200 OK[EOL]" > .... > > Client sent data step4 (re-requesting the same uri): > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "POST /test/secure/ > HTTP/1.1[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "Content-Length: 18[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "Content-Type: > application/x-www-form-urlencoded; charset=UTF-8[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "Host: localhost:8080[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "Connection: Keep-Alive[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "User-Agent: > Apache-HttpClient/4.0.1 (java 1.5)[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "Expect: 100-Continue[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "Cookie: > JSESSIONID=A5FB87E6199EADB2AB18010DA295EC99[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "Cookie2: $Version=1[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - >> POST /test/secure/ HTTP/1.1 > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - >> Content-Length: 18 > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - >> Content-Type: > application/x-www-form-urlencoded; charset=UTF-8 > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - >> Host: localhost:8080 > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - >> Connection: Keep-Alive > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - >> User-Agent: > Apache-HttpClient/4.0.1 (java 1.5) > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - >> Expect: 100-Continue > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - >> Cookie: > JSESSIONID=A5FB87E6199EADB2AB18010DA295EC99 > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - >> Cookie2: $Version=1 > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - << "HTTP/1.1 100 Continue[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - << "[EOL]" > 2010/08/12 20:20:17:796 CEST [DEBUG] headers - << HTTP/1.1 100 Continue > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - >> "testName=testValue" > 2010/08/12 20:20:17:796 CEST [DEBUG] wire - << "HTTP/1.1 501 Not > Implemented[EOL]" > ... > > >> Are you sure the client isn't making that error? >> What is the client code which makes the request here? > > I'm not entirely sure about the client code, but posted it to the > HTTPComponents list and regarding the logs provided above, the client > behaviour seems to be ok. My client code is the following: > > //SOURCE START > DefaultHttpClient httpclient = new DefaultHttpClient(); > HttpPost httpost = new HttpPost(new > URI("http://localhost:8080/test/secure/")); > List <NameValuePair> nvps = new ArrayList <NameValuePair>(); > nvps.add(new BasicNameValuePair("j_username", "tomcat")); > nvps.add(new BasicNameValuePair("j_password", "tomcat")); > httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); > HttpResponse response = httpclient.execute(httpost); > System.out.println("Response Status: " + response.getStatusLine()); > response.getEntity().consumeContent(); > httpost.setURI(new > URI("http://localhost:8080/test/secure/j_security_check")); > response = httpclient.execute(httpost); > HttpEntity entity = response.getEntity(); > System.out.println("Response Status: " + response.getStatusLine());
For the below, isn't there an alternative method of configuring the client to automatically follow redirects? p > int code = response.getStatusLine().getStatusCode()/100; > if(code == 3) { > String location = response.getFirstHeader("location").getValue(); > System.out.println("==> REDIRECT to "+location); > entity.consumeContent(); > httpost.setURI(new URI(location)); > List <NameValuePair> params = new ArrayList <NameValuePair>(); > params.add(new BasicNameValuePair("testName", "testValue")); > httpost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); > for(int i=0; i<5; i++) { > response = httpclient.execute(httpost); > System.out.println("Response Status: " + response.getStatusLine()); > entity = response.getEntity(); > entity.consumeContent(); > } > } > httpclient.getConnectionManager().shutdown(); > //SOURCE END > > > best regards > Hans > > > 2010/8/13 Pid <p...@pidster.com>: >> On 13/08/2010 10:07, Hans Wahn wrote: >>> Hello Tomcat-Users, >>> >>> I'm facing a strange issue when using HttpComponents with successive >>> POST requests against a simple Tomcat 7 servlet (Form-based POST >>> Authentication is enabled). After a sucessfull authentication, the >>> client requests the same protected resource a few times in a row, but >>> the second request always returns a "501 Method not implemented" >>> status. All other requests succeed. >>> >>> The following communication takes place: >>> 1. Client requests a protected resource; Tomcat returns the login page >>> (HTTP200) >>> 2. Client provides the user credentials and calls the login resource; >>> Tomcat returns a redirect (HTTP302) >>> 3. Client sets the location from the redirect for the next >>> request(identical to URI from #1) and requests it; Tomcat returns the >>> page (HTTP200) >>> 4. Client requests the same resource again; Tomcat returns a HTTP501 - >>> Method not implemented >>> 5. Client requests the same resource again; Tomcat returns the page >>> (HTTP200) >>> 6. Client requests the same resource again; Tomcat returns the page >>> (HTTP200) >>> 7. Client requests the same resource again; Tomcat returns the page >>> (HTTP200) >>> >>> >>> The access log message regarding the 501 says: >>> '"testName=testValuePOST /test/secure/ HTTP/1.1" 501 1278', which may >> >> What is the exact header & body of the 302 redirect from Tomcat in #2? >> >> Given that the client performs steps 3 & 4, can you check what's being >> *sent* by the client, not what's being received by Tomcat? >> >> Are you sure the client isn't making that error? >> >> What is the client code which makes the request here? >> >> >> p >> >>> indicate that the entity data and the HTTP-method name somehow got >>> mixed up!? Strangely the HTTP501 does not appear in case of a JSP for >>> the requested resource, only if facing a form-based POST >>> authentication Servlet in Tomcat 7. The servlet does only implement >>> post and get(which calls the doPost) and returns just a string. The >>> client code should be fine since I already posted this issue on the >>> HTTPComponents mailing list and the data sent over the wire seems to >>> be right. >>> I'd like to attach the zipped webapp dir along with the simple client >>> souce code, but along with the HTTPComponents libraries it's ~450KB >>> and I don't know the attachment policy of this list. How can I provide >>> further helpfull information? >>> >>> >>> Thanks for helping in advance >>> best regards >>> Hans >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>> For additional commands, e-mail: users-h...@tomcat.apache.org >>> >> >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org >
signature.asc
Description: OpenPGP digital signature