HttpURLConnection redirects my POST request to GET

I send an HttpURLConnection with setInstanceFollowRedirects(true) and POST , I get a redirect response that looks like this:

 HTTP/1.1 302 Found Server: nginx Date: Wed, 09 Jan 2013 20:47:56 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Status: 302 Found Status: 301 Moved Permanently Location: http://foo.bar/... 

And the next request that the JVM sends is a GET request (to the correct, redirected URL). It also seems to remove one of the HTTP headers added to the original request.

FYI, I do not use HttpURLConnection directly, but rather through the shell framework Framework.

My question is a known issue with Java (Sun JVM 1.7.0)? Or could it be a bug in the Play Framework?

+4
source share
2 answers

This is the default Java behavior. You can change it by setting the system property http.strictPostRedirect = true.

For more details, see this quote from the Java source. HttpURLConnection implementation source :

  /* The HTTP/1.1 spec says that a redirect from a POST * *should not* be immediately turned into a GET, and * that some HTTP/1.0 clients incorrectly did this. * Correct behavior redirects a POST to another POST. * Unfortunately, since most browsers have this incorrect * behavior, the web works this way now. Typical usage * seems to be: * POST a login code or passwd to a web page. * after validation, the server redirects to another * (welcome) page * The second request is (erroneously) expected to be GET * * We will do the incorrect thing (POST-->GET) by default. * We will provide the capability to do the "right" thing * (POST-->POST) by a system property, "http.strictPostRedirect=true" */ 
+5
source

Alternative if you are managing a server: use status code 307.

0
source

All Articles