Hi Josiah,
On 07/11/2025 09:46, Daniel Fuchs wrote:
Does the server supports https? Because if the server does not
support https it might just be trying to read the request line
before responding, and the client might be waiting for the server
hello. The same would happen with HTTP/1.1 if you tried to use
https with a server that only supports http.
So that seems to be the issue.
I had a look at your script - and I believe that if
you had used HttpsServer.create() instead of HttpServer.create()
you would have got the exception as expected.
I am not sure there's much we can do there. If you try to send
an HTTP/1.1 https:// request to that server youn will observe
the same behavior.
Specifically try this:
```
// http1 server on tcp 8080
// btw what if we made a conveniece method? I'll contribute it
myself, just say the word
var http1 = HttpServer.create(new InetSocketAddress(8080), 0);
http1.createContext("/", ctx -> ctx.sendResponseHeaders(101, -1));
http1.start();
var client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.build();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://localhost:8080/"))
.build();
System.out.println("req: " + request);
var resp = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("resp: " + resp);
```
This has the same behaviour and does not involve HTTP/3.
To see the exception, add this to the request in your
original script:
```
import java.net.http.HttpOption;
import static java.net.http.HttpOption.H3_DISCOVERY;
import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY;
...
HttpRequest.newBuilder().uri(URI.create("https://localhost:8080"))
.setOption(H3_DISCOVERY, HTTP_3_URI_ONLY) <<<<< HTTP/3 only
.GET().build(),
```
this will prevent the client from falling back to TCP.
best regards,
-- daniel