> ### **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>
Conor Cleary has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains eight additional commits since the last revision: - Merge branch 'JDK-8296410' of https://github.com/c-cleary/jdk into JDK-8296410 - 8296410: Updated copyright header - 8296410: Use empty trailers instead of sample ones - 8296410: HttpClient throws java.io.IOException: no statuscode in response for HTTP2 - 8296410: Made test compatible with new test library structure - Merge branch 'master' of https://github.com/c-cleary/jdk into JDK-8296410 - 8296410: Push Promise Test Case Modifications - 8296410: HttpClient throws java.io.IOException: no statuscode in response for HTTP2 ------------- Changes: - all: https://git.openjdk.org/jdk/pull/12028/files - new: https://git.openjdk.org/jdk/pull/12028/files/5a1d54cb..ac396b72 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=12028&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=12028&range=00-01 Stats: 236735 lines in 5385 files changed: 110769 ins; 77080 del; 48886 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
