RFR: 8349910: Implement JEP 517: HTTP/3 for the HTTP Client API [v9]

Daniel Fuchs dfuchs at openjdk.org
Thu Jun 26 18:13:46 UTC 2025


On Thu, 26 Jun 2025 16:36:40 GMT, Daniel Fuchs <dfuchs at openjdk.org> wrote:

>> Hi,
>> 
>> Please find here a PR for the implementation of [JEP 517: HTTP/3 for the HTTP Client API](https://openjdk.org/jeps/517).
>> 
>> The CSR can be viewed at [JDK-8350588: Implement JEP 517: HTTP/3 for the HTTP Client API](https://bugs.openjdk.org/browse/JDK-8350588)
>> 
>> This JEP proposes to enhance the HttpClient implementation to support HTTP/3.
>> It adds a non-exposed / non-exported internal implementation of the QUIC protocol based on DatagramChannel and the SunJSSE SSLContext provider.
>
> Daniel Fuchs has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 525 commits:
> 
>  - merge latest changes from master branch
>  - http3: run H3StreamLimitReachedTest.java with -Djdk.httpclient.http3.maxStreamLimitTimeout=0 too
>  - retry the ResetControlStream test as needed
>  - http3: fix pending connection and reconnection on stream limit reached logic
>  - http3: pending acknowledgement should be registered before actually sending the packet
>  - http3: fix race with ping requests in PacketSpaceManager.java causing intermittent failures in H3ErrorHandlingTest.java
>  - http3: improve exceptions in Http3ServerExchange.java
>  - http3: fix exception handling in CancelRequestTest.java
>  - http3: review feedback - revert HPACK.java
>  - Implement X509TrustManagerImpl#checkClientTrusted for QUIC
>  - ... and 515 more: https://git.openjdk.org/jdk/compare/5a1301df...0229c215

src/java.base/share/classes/sun/security/ssl/KeyShareExtension.java line 49:

> 47:     static final ExtensionConsumer chOnLoadConsumer =
> 48:             new CHKeyShareConsumer();
> 49:     static final HandshakeAbsence chOnTradeAbsence =

Could we fix that one in mainline to remove this file from the PR?

src/java.base/share/classes/sun/security/ssl/OutputRecord.java line 168:

> 166:         throw new UnsupportedOperationException();
> 167:     }
> 168: 

Do we need those two methods here? Or could we just have them on `QuicEngineOutputRecord` and do the appropriate cast at the point they are called?
Or do we have that at this level for performance reasons?

src/java.base/share/classes/sun/security/ssl/PreSharedKeyExtension.java line 61:

> 59:     static final HandshakeConsumer chOnTradeConsumer =
> 60:             new CHPreSharedKeyUpdate();
> 61:     static final HandshakeAbsence chOnTradeAbsence =

Could we bring this change to mainline to remove this file from this PR?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24751#discussion_r2169560172
PR Review Comment: https://git.openjdk.org/jdk/pull/24751#discussion_r2169583454
PR Review Comment: https://git.openjdk.org/jdk/pull/24751#discussion_r2169585913


More information about the net-dev mailing list