HttpUrlConnection 在 connect() 上获得响应 body

HttpUrlConnection gets response body on connect()

考虑以下代码。

try {
    httpURLConnection = (HttpURLConnection) new URL(strings[0]).openConnection();

    httpURLConnection.setConnectTimeout(Config.HTTP_CONNECTION_TIMEOUT);
    httpURLConnection.setReadTimeout(Config.HTTP_CONNECTION_TIMEOUT);

    httpURLConnection.connect();

    responseCode = httpURLConnection.getResponseCode();
    httpURLConnection.getHeaderFields();
}
finally {
    httpURLConnection.disconnect();
}

问题是即使我不使用 InputStream 来读取响应,在我的 Internet/Wifi 连接日志中我也可以看到 response-body。我想要的只是检查 header 中的一个字段,然后根据该字段我将继续阅读 InputStream.

我的问题是:

  1. 连接流在创建和读取 BufferedInputStream 之前自动下载 all/partial 文件是否正确?
  2. 如果是,那么是否可以停止文件下载,直到使用 InputStream 读取响应?
  3. 如果不是,那么我做错了什么或遗漏了什么?
  1. 响应包括header和body,服务器不会停止让客户端在发送[=之前确认headers 35=].
    在客户端能够从 header 读取响应代码时,body 的一部分已经发送,其大小取决于网络延迟、缓冲、... .
    HttpURLConnection.getResponseCode()的当前实现甚至使用getInputStream()来确保连接处于正确状态。

  2. 客户端可以选择忽略body,但通常不推荐这样做,因为它可能会阻止持久连接被重用。
    我不确定 Android 但自 Java 6 以来,后台线程自动用于读取剩余数据。

  3. 如果 If-Modified-Since 不是一个选项,为什么不使用 HEAD request? :

The HTTP HEAD method requests the headers that are returned if the specified resource would be requested with an HTTP GET method. Such a request can be done before deciding to download a large resource to save bandwidth, for example.