Enter a domain or URL to check if it is up
Type a domain and find out whether a site is down for everyone or only for you. The request is sent from Cloudflare's network, not from your browser, so it is independent of your ISP, your DNS resolver and any block or cache on your side. You get the HTTP status, the response time, the IP addresses the name resolved to and the server headers.
Enter a domain or URL to check if it is up
A server that answers at all is up, even with a 403 or 404 for the path you entered, because the problem is then the page, not the host. Down means a 5xx error, a timeout after 15 seconds, a refused connection, or a name that does not resolve. The result tells you which of these it was.
That combination points at your own network: a stale DNS entry, an ISP or office filter, a VPN, or a browser extension. Check the domain with the DNS propagation checker, switch to a public resolver such as 1.1.1.1, try a private window, or test on mobile data to work out which one it is.
# Print only the status code and total time, follow redirects, give up after 10 s
curl -o /dev/null -s -L --max-time 10 -w "%{http_code} %{time_total}s\n" https://example.com
# 200 0.182s -> up
# 000 10.003s -> no response at all (DNS, firewall or server down) async function isUp(url) {
const started = Date.now();
try {
const res = await fetch(url, { method: "HEAD", redirect: "follow", signal: AbortSignal.timeout(10_000) });
return { up: res.status < 500, status: res.status, ms: Date.now() - started };
} catch (err) {
return { up: false, error: err.name === "TimeoutError" ? "timeout" : err.message };
}
}
console.log(await isUp("https://example.com")); Some servers reject HEAD with 405. Retry with GET and discard the body when that happens.
import requests
def is_up(url, timeout=10):
try:
r = requests.head(url, allow_redirects=True, timeout=timeout)
if r.status_code in (403, 405):
r = requests.get(url, allow_redirects=True, timeout=timeout, stream=True)
return r.status_code < 500, r.status_code, round(r.elapsed.total_seconds() * 1000)
except requests.RequestException as e:
return False, None, str(e)
print(is_up("https://example.com")) This tool follows the specifications below. Read them when you need the exact normative wording, for example to settle an edge case between two implementations.
It sends a request from Cloudflare's network and reads the answer. A response with any status below 500 means the server is up, even if it answers 403 or 404 for that path. A 5xx, a connection failure, a timeout or a DNS name that does not resolve is reported as down.
The problem is between you and the site: your DNS resolver, your ISP blocking the domain, a firewall at work, a VPN, or a stale cache. Try the DNS propagation checker to see what your resolver should return, then flush your DNS cache or switch resolvers.
No. A single probe can hit a bad moment or a single failing server behind a load balancer. Run the check two or three times over a minute. If it fails each time and the DNS record resolves, the site itself is down.
The tool tries HEAD first because it is cheap. Some servers answer HEAD with 405 or 403, so it falls back to a GET and discards the body. The Method field in the result shows which one produced the answer.
Not for JavaScript-based analytics such as GA4, because no script runs. Server logs do record the request, with a user agent that identifies WebDevUtility.
See what each status means in the HTTP status code list, check whether the domain's records have propagated with the DNS propagation checker, or trace where a URL ends up with the redirect checker.