### What happened?

When running multiple Saucelabs tests in parallel we see a lot of timeouts when trying to upgrade from Selenium 4.8.3 to 4.9.0. 

The errors are timeouts creating drivers or `org.openqa.selenium.WebDriverException: Invalid message: ERROR Internal Server Error` or `Caused by: org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Handshake response does not match any supported protocol` (which might be that same but obfuscated because of #11927)

After bisecting the issue, we see that this is caused by #11816. It seems a bit like Saucelabs uses redirects when waiting for a session to be available and Selenium no longer correctly follows those

### How can we reproduce the issue?

```shell
https://github.com/vaadin/testbench/pull/1645 is our test PR which shows the problem when run in our CI. Not sure how to reproduce it elsewhere as it does not reproduce locally. Potentially by running more tests in parallel than available Saucelabs slots, so the tests have to wait for a driver for more than 30-60s.
```


### Relevant log output

```shell
org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Handshake response does not match any supported protocol 

or

org.openqa.selenium.WebDriverException: Invalid message: ERROR Internal Server Error
```


### Operating System

Linux, version 4.14.231-173.361.amzn2.x86_64

### Selenium version

4.9.1

### What are the browser(s) and version(s) where you see this issue?

Unrelated

### What are the browser driver(s) and version(s) where you see this issue?

Unrelated

### Are you using Selenium Grid?

_No response_
}
                  @Override
                  public CompletionStage<?> onClose(
                      java.net.http.WebSocket webSocket, int statusCode, String reason) {
                    LOG.fine("Closing websocket");
                    listener.onClose(statusCode, reason);
                    return null;
                  }
                  @Override
                  public void onError(java.net.http.WebSocket webSocket, Throwable error) {
                    LOG.log(
                        Level.FINE, error, () -> "An error has occurred: " + error.getMessage());
                    listener.onError(error);
                    webSocket.request(1);
                  }
                });
    java.net.http.WebSocket underlyingSocket;
    try {
      underlyingSocket =
          webSocketCompletableFuture.get(readTimeout.toMillis(), TimeUnit.MILLISECONDS);
    } catch (CancellationException e) {
      throw new WebDriverException(e.getMessage(), e);
    } catch (ExecutionException e) {
      Throwable cause = e.getCause();
      if (cause instanceof HttpTimeoutException) {
        throw new TimeoutException(cause);
      } else if (cause instanceof IOException) {
        throw new UncheckedIOException((IOException) cause);
      } else if (cause instanceof RuntimeException) {
        throw (RuntimeException) cause;