RFR: 8296410: HttpClient throws java.io.IOException: no statuscode in response for HTTP2 [v3]

Jaikiran Pai jpai at openjdk.org
Wed Feb 8 12:58:50 UTC 2023


On Tue, 7 Feb 2023 14:51:25 GMT, Conor Cleary <ccleary at openjdk.org> 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>
>
> Conor Cleary has refreshed the contents of this pull request, and previous commits have been removed. Incremental views are not available.

Hello Conor, something is odd with this PR or the generated webrev. Neither the GitHub UI nor the https://github.com/openjdk/jdk/pull/12028.diff list or show `test/jdk/java/net/httpclient/http2/IdleConnectionTimeoutTest.java` as a changed/updated file. However, the webrev version 2 (full) https://openjdk.github.io/cr/?repo=jdk&pr=12028&range=02, listed in the comment of this PR https://github.com/openjdk/jdk/pull/12028#issuecomment-1385604175 shows considerable changes to that `test/jdk/java/net/httpclient/http2/IdleConnectionTimeoutTest.java` file.

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

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


More information about the net-dev mailing list