带内容长度的HTTPS请求> 0但是身体是空的

时间:2018-01-08 08:23:32

标签: android http post retrofit2 okhttp3

我的android应用程序遇到了一个奇怪的问题。有时,服务器只获取标题而没有正文的POST HTTP请求。我使用OkHttpClient 3.6在Android上使用Retrofit 2.2。在服务器端日志中,我可以看到内容长度是> 0.根据我的理解,内容长度只是以字节为单位的正文大小,这再次增加了对发生的事情的困惑。

我的第一个猜测是看重试POST请求是否出错。但经过RetryAndFollowupInterceptor.javaPR #1259以及PR #2479,我认为这不是问题。

我的第二个猜测是,请求可能会在中途取消,例如上传图片但用户关闭应用程序,这可能是可能的。我尝试重现这种情况,但是运行API 16和API 26的Emulators以及运行Android 24的Moto G设备都没有成功。

我已经看到我的大多数API通话在3G网络上大约需要1秒钟。我甚至尝试过设置2G网络但效果不佳的仿真器,但无法重现错误。

我只是想知道服务器是否可能在某些情况下只收到标题而没有正文?或者HTTP协议本身以不同的方式发送标题和正文?可能是某些服务器(使用PHP)配置被剥离的情况?我可以想到一些优化,对于大型体型,如多部分请求,HTTP可能正在做,但我的身体只是{" id":12345}。

有没有人遇到过类似的问题?

1 个答案:

答案 0 :(得分:0)

我们在tcp连接中看到了同样的情况。标头显示将要跟随的相当大的主体,但是随后我们得到一个空的主体。我们能够通过在tcplistener获得连接后放置一个可怕的thread.wait(500)来减少(但不能消除)这种情况。被警告,但是等待会引起其他问题,尤其是套接字的容量,因为现在所有连接都可能徘徊半秒钟。

为什么需要等待,我无法解释。从理论上讲,套接字仍在接收并且需要几毫秒的时间才能将其全部移交给侦听应用程序。