Skip to content

HttpClient always uses HTTP/3 with Unix Domain Sockets Since BOM 2024.0.0 #3692

@bahaa

Description

@bahaa

When using HttpClient from BOM 2024.0.0 and up to connect to a Unix Domain Socket (e.g. Docker Engine API), the client always uses HTTP/3 if HTTP11 is explicitly specified. This happens regardless of the transport (NIO, kqueue, ...). If HTTP/2 is specified, the client respects the version in this case.

Expected Behavior

HttpClient should use HTTP11 when HTTP11 is specified .protocol(HttpProtocol.HTTP11).

Actual Behavior

HttpClient uses HTTP3 if HTTP11 is required. This happens only when the BOM version is >= 2024.0.0.

Steps to Reproduce

class AppTests {

    @Test
    void testUnixSocket() throws URISyntaxException {
        final var socketPath = "/var/run/docker.sock";

        final var client = HttpClient.create()
                .protocol(HttpProtocol.HTTP11)
                // Switching to NIO transport didn't fix the issue
                .remoteAddress(() -> new DomainSocketAddress(socketPath))
                .wiretap(true);

        final var response = client.get()
                .uri("/info")
                .responseContent()
                .aggregate()
                .asString()
                .block();

        System.out.println(response); // 505 HTTP Version Not Supported: unsupported protocol version
    }

Possible Solution

Your Environment

  • Reactor version(s) used: BOM 2024.0.0, 2024.0.4, 2025.0.0-M1 (2023.0.16 worked though).
  • JVM version (java -version): 21 and 24
  • OS and version (eg. uname -a): macOS 15.3.2

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions