On Mon, 23 Jan 2023 15:00:07 GMT, Conor Cleary <[email protected]> wrote:
>> ### **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> > > Semi-related, a previous fix concerning Push Promises: > https://github.com/openjdk/jdk/pull/8518 > ⚠️ @c-cleary This pull request contains merges that bring in commits not > present in the target repository. Since this is not a "merge style" pull > request, these changes will be squashed when this pull request in integrated. > If this is your intention, then please ignore this message. If you want to > preserve the commit structure, you must change the title of this pull request > to `Merge <project>:<branch>` where `<project>` is the name of another > project in the [OpenJDK organization](https://github.com/openjdk) (for > example `Merge jdk:master`). This is due to local squashing of commits, can be ignored. I have verified the correctness of the changeset ------------- PR: https://git.openjdk.org/jdk/pull/12028
