HttpURLConnection getInputStream()有一秒延迟

我正在使用HttpURLConnection来发出POST请求。 我在测试期间始终观察到相同的行为:

  1. 第一个请求运行速度非常快(毫秒)
  2. 以下所有请求需要一秒钟+几毫秒

所以有些事情导致1秒的延迟。 它能是什么? 延迟恰好发生在HttpURLConnection#getInputStream()中。 我用HttpClient替换了实现 – 然后一切正常,没有第二次延迟(所以它不是服务器故障)。 但我真的不想使用任何外部依赖,所以我想修复HttpURLConnection的事情……任何想法?

目前的实施情况。 我尝试了stackoverflow的一些提示(向请求添加标题),但没有成功。

URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Length", "" + (body == null ? 0 : body.length)); // Send post request con.setDoOutput(true); OutputStream wr = con.getOutputStream(); if (body != null) { wr.write(body); } wr.flush(); wr.close(); BufferedReader rd = new BufferedReader(new InputStreamReader( con.getInputStream())); String line; String result = ""; while ((line = rd.readLine()) != null) { result += line; } rd.close(); con.disconnect(); return result; 

PS:这是关于jse,而不是android。

您永远不会从连接中关闭输入流 – 这可能意味着连接不符合池的条件,并且在下一次尝试时,它等待最多一秒钟以查看先前请求的连接是否有资格进行池化。

至少,关闭流是个好主意。 如果您正在使用Java 7,请使用try-with-resources块 – 并为编写器同上。

另外,我建议您在阅读时明确说明您期望的编码 – 或者使用更高级别的库,该库会根据标头自动检测到。