【发布时间】:2014-05-04 00:43:45
【问题描述】:
我正在使用 Retrofit 1.5.0 和 OkHttp 调用 REST POST 端点,该端点为后续的 GET 请求返回 302。使用 OkHttp 1.3.0 可以按预期工作。但是,在升级到 OkHttp 1.5.0(或更高版本)后,即使两个请求都已发出,我也会收到 SocketTimeoutException。我的 RestAdapter 使用默认的 OkClient。
OkHttp 团队最近修复了一个问题 (https://github.com/square/okhttp/issues/296),其中 Content-Length 标头从 POST 请求保留到 GET 请求。查看 OkHttp 1.5.2 的代码,似乎可以通过在创建 GET 请求之前删除 com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse() 中的标头来实现修复;但是,如果实例字段 fixedContentLength 不是 -1,则在 com.squareup.okhttp.internal.http.HttpURLConnectionImpl.newHttpEngine() 中重新创建 Content-Length 标头。 fixedContentLength 字段是由 retrofit.client.UrlConnectionClient.prepareRequest() 设置的 before 原始 POST 请求,因此结果是在发出 GET 请求时 Content-Length 标头存在正值。
这是一个错误还是从配置的角度来看我遗漏了什么?
【问题讨论】: