问题描述
我正在发送一个带有 setInstanceFollowRedirects(true)
和 POST
的 HttpURLConnection
,得到如下所示的重定向响应:
I'm sending a HttpURLConnection
with setInstanceFollowRedirects(true)
and POST
, 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/...
JVM 发送的下一个请求是 GET
请求(到正确的重定向 URL).它似乎也删除了我添加到原始请求中的 HTTP 标头之一.
And the next request that the JVM sends is a GET
request (to the correct, redirected URL). It also seems to drop one of the HTTP headers I added to the original request.
仅供参考,我没有直接使用 HttpURLConnection
,而是通过 Play Framework 的 WS 包装器.
FYI, I'm not using HttpURLConnection
directly, but rather through Play Framework's WS wrapper.
我的问题是 - 这是 Java (Sun JVM 1.7.0) 的已知问题吗?或者它可能是 Play Framework 中的一个错误?
My question is - is this a known issue with Java (Sun JVM 1.7.0)? Or could it be a bug in Play Framework?
推荐答案
这是 Java 的默认行为.您可以通过设置系统属性 http.strictPostRedirect=true 来更改它.
This is the default behavior of Java. You can change it by setting the system property http.strictPostRedirect=true.
详情请看Java源码中的这个引用HttpURLConnection 实现源码:
For details, please 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"
*/
这篇关于HttpURLConnection 将我的 POST 请求重定向到 GET的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!