# HTTP request failed: java.util.concurrent.TimeoutException: Idle timeout expired: X/y ms

> Canonical HTML version: https://rocketvalidator.com/html-validation/http-request-failed-java-util-concurrent-timeoutexception-idle-timeout-expired-x-y-ms
> Attribution: Rocket Validator (https://rocketvalidator.com)
> License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

This error is not an HTML validation issue — it is a network problem: the validator connected to your server but received no data within its idle timeout window, so it gave up before the page finished loading.

The validator fetches your page over HTTP to check it. An `Idle timeout expired` differs from a connect timeout: the connection opened fine, but then the server went silent and sent no bytes for the whole idle window (`5000/5000 ms` means the full 5000 ms allowance elapsed). The validator stops waiting and reports the request as failed. Common causes include:

- The server takes longer than the idle window to generate the page, often due to slow database queries or heavy server-side rendering.
- A streaming or chunked response stalls partway through.
- Rate limiting or a load balancer holds the connection without sending a response.
- A proxy or firewall accepts the connection but never forwards the data.

## How to work around it

If the validator cannot read your page in time, validate the HTML directly instead of giving a URL. Paste your source into the "Validate by Direct Input" tab at `https://validator.w3.org/nu/`, or use "Validate by File Upload" to send an `.html` file from your machine.

For local development or for pages that are slow to render, run the [Nu Html Checker](https://validator.github.io/validator/) locally as a standalone Java application:

```sh
java -cp vnu.jar nu.validator.servlet.Main 8888
```

This starts a local instance on port `8888`, so you can validate pages without depending on the public validator's idle timeout.
