RFR: 8368695: Support 101 switching protocol in jdk.httpserver [v5]
Daniel Fuchs
dfuchs at openjdk.org
Wed Oct 15 15:28:45 UTC 2025
On Wed, 15 Oct 2025 14:17:20 GMT, Michael McMahon <michaelm at openjdk.org> wrote:
>> Josiah Noel has updated the pull request incrementally with one additional commit since the last revision:
>>
>> tab
>
> Here is a proposal for discussion. This would be added to the end of the class level docs for HttpExchange
>
>
> <b>Upgrading HTTP/1.1 connections</b>
>
> <br>Sending a 101 response to a request from the client to upgrade to some other protocol has the effect of detaching
> the underlying connection from the HTTP stack. The {@link InputStream} and {@link OutputStream} returned from
> {@link #getRequestBody()} and {@link #getResponseBody()} respectively, after sending the 101 response, returns raw
> streams to the underlying socket. {@code sendResponseHeaders(101, -1)} must be called prior to obtaining the
> detached input and output streams. It is also an error to send a 101 response if no {@code Upgrade} header was present
> in the request, or the request was anything other than a GET (or CONNECT?) or to pass a content length other than
> {@code -1}. Other than that, the library does not restrict or interpret the Upgrade header value. It is up to the calling
> code to implement whatever higher level protocol is required over the underlying socket. It is up to the calling code to
> eventually obtain and eventually close both the detached {@link #getRequestBody() InputStream} and
> {@link#getResponseBody() OutputStream} to prevent resource leaks. Closing the exchange after {@code
> sendResponseHeaders(101, -1)} has been called has no effect on these streams. Terminating the server with {@link
> HttpServer.stop(int)} closes all sockets associated with the server including any sockets detached through this
> mechanism.
>
>
> The apidoc for HttpServer.stop would need to mention that sockets detached from the upgrade mechanism are also closed.
Thanks @Michael-Mc-Mahon for driving this discussion. Would this text be normative - that it - would any implementation plugged through the SPI need to support this? If not we should find some way to tie that to the JDK built-in implementation. I know that the HttpServer API itself is not part of the Java SE spec - but maybe we should set some expectations of what an implementation plugged through the SPI must, should, or might do.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/27751#issuecomment-3407011129
More information about the net-dev
mailing list