板上各位大大好,
我这几天写android的时候遇到一个很神秘的问题,
事情是这样的:
有一支我一两年多以前写的程式,
会在呼叫Service之后,背景执行HttpURLConnection,
POST到我本机或线上服务器API取得资料,
一两年以前这个程式的这部分都没遇到过什么问题。
这几天为了改版这个程式,
程式在一些地方新增了功能,
而网络连线的部分完全没有改动过,
但是所有的API都只有第一次会成功得到200(OK),
第二个呼叫的API都一定会获得400(Bad Request)
ex:
API-1(200) -> API-2(400) -> API-1(400)
API-1(200) -> API-1(400) -> API-2(400)
API-2(200) -> API-1(400) -> API-2(400)
另外,如果使用HTTPS的话则是都会成功
只有HTTP会遇到这个状况
我上网查了许久
发现stack overflow竟然七年以前就有人问过类似的问题了
https://goo.gl/JXM9vs
里面推荐数较多的两个方法
1. System.setProperty("http.keepAlive", "false");
没有用
2. conn.setRequestProperty("connection", "close");
这个则成功解决了我的问题
我想问的是
我以为conn.disconnect();就应该可以断开连线了
为什么还需要set preoerty connection = close
是我弄错什么了吗?或是里面有什么特殊机制?
另外,如果这个问题很早以前就有
我之前怎么都没遇到过
是sdk版本的影响吗?