### **Description**
With HTTP/2, a possible flow of an exchange could be that a Server responds to 
a simple request by sending response headers within a HEADERS frame, the 
requested resources and trailing headers with another HEADERS frame including 
the END_HEADERS and END_STREAM flags (if they were not previously given in the 
Response Headers). Usually an HTTP/2 client should opt-in to make use of 
trailing headers though this behaviour is not supoorted by default with the 
HttpClient. 

It is still possible in any case that a trailing HEADERS frame can be sent, 
even if the frame just carries flags and no headers specified in the header 
block. This edge case was causing an IOException to be thrown and the client to 
shut down unexpectedly.

### **Summary of Changes & Justification**
In Stream, a means to track the state of whether or not a final status code for 
an exchange has been received was added to prevent the exception occuring due 
to a HEADERS frame with no status code arriving after response headers were 
received. In the case of a partial response (status codes in the 1XX range), 
the flag for receiving a final response code is not set until a response 
outside of the 1XX range is received.

Lastly, if trailing headers are received, they are logged and dumped. The 
response headers consumer is then reset.

---------
### Progress
- [ ] Change must be properly reviewed (1 review required, with at least 1 
[Reviewer](https://openjdk.org/bylaws#reviewer))
- [x] Change must not contain extraneous whitespace
- [x] Commit message must refer to an issue



### Reviewing
<details><summary>Using <code>git</code></summary>

Checkout this PR locally: \
`$ git fetch https://git.openjdk.org/jdk pull/12028/head:pull/12028` \
`$ git checkout pull/12028`

Update a local copy of the PR: \
`$ git checkout pull/12028` \
`$ git pull https://git.openjdk.org/jdk pull/12028/head`

</details>
<details><summary>Using Skara CLI tools</summary>

Checkout this PR locally: \
`$ git pr checkout 12028`

View PR using the GUI difftool: \
`$ git pr show -t 12028`

</details>
<details><summary>Using diff file</summary>

Download this PR as a diff file: \
<a 
href="https://git.openjdk.org/jdk/pull/12028.diff";>https://git.openjdk.org/jdk/pull/12028.diff</a>

</details>

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

Commit messages:
 - 8296410: Updated copyright header
 - 8296410: Use empty trailers instead of sample ones
 - 8296410: HttpClient throws java.io.IOException: no statuscode in response 
for HTTP2

Changes: https://git.openjdk.org/jdk/pull/12028/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12028&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8296410
  Stats: 252 lines in 2 files changed: 236 ins; 4 del; 12 mod
  Patch: https://git.openjdk.org/jdk/pull/12028.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12028/head:pull/12028

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

Reply via email to