The issue here is that `HttpURLConnection` is automatically disconnected 
(`HttpClient` is set to `null`, `connected` is set to `false`) when a response 
with no response body bytes is received. This happens before a fake empty body 
input stream is returned to the user. That behaviour also occurs with any 
method for which `content-length: 0` is returned (GET, POST, custom, anything), 
and with any status code (204, 304) for which there is no body.

In this case, the proposed fix is to store the `SSLSession` in the 
`AbstractDelegateHttpsURLConnection` subclass until such a time where 
`disconnect()` is explicitely closed. Information pertaining to SSL, such as 
server certificates, can be extracted from the saved `SSLSession`.

-------------

Commit messages:
 - 8376031: HttpsURLConnection.getServerCertificates() throws 
"java.lang.IllegalStateException: connection not yet open" for the HEAD method

Changes: https://git.openjdk.org/jdk/pull/29489/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=29489&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8376031
  Stats: 481 lines in 4 files changed: 388 ins; 79 del; 14 mod
  Patch: https://git.openjdk.org/jdk/pull/29489.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29489/head:pull/29489

PR: https://git.openjdk.org/jdk/pull/29489

Reply via email to