Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

The strictest command-line test is curl --http3-only -I https://example.com/, run with a curl build that includes HTTP/3 support. It forces a QUIC/HTTP/3 connection and fails rather than silently falling back. In a browser, open DevTools, enable the Network panel’s Protocol column, reload, and look for h3. An Alt-Svc header is useful evidence that a server advertises HTTP/3, but only a negotiated request proves that your client and network actually used it.

What an HTTP/3 test must prove

HTTP/3 is HTTP carried over QUIC, which uses UDP rather than TCP. During TLS negotiation, HTTP/3 identifies itself with the ALPN token h3. A useful test therefore answers two separate questions:

  • Does the origin advertise an HTTP/3 endpoint?
  • Can this particular client, network and URL complete a real HTTP/3 request?

The first question is answered by response headers such as Alt-Svc: h3=":443". The second requires a negotiated transfer, shown by strict curl or a browser’s protocol information. Test the exact HTTPS hostname you care about: redirects, CDNs, subdomains and third-party assets can negotiate different protocols.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Method 1: force HTTP/3 with curl

Strict probe (recommended)

Run:

curl --http3-only -I https://example.com/

Replace example.com with the target URL. The -I option requests headers, while --http3-only permits no HTTP/2 or HTTP/1.1 fallback. A successful response demonstrates that this curl client reached the URL over HTTP/3. The response status can be 200, 301, 403 or another valid HTTP status; the important fact is that the HTTP/3 exchange completed.

Check that your curl supports HTTP/3

First inspect the feature list:

curl -V

Look for an HTTP/3-capable build. If curl says option --http3-only is unknown, the installed binary or its linked libcurl was built without HTTP/3 support. Install a distribution package that provides HTTP/3, use an up-to-date official build, or compile curl with an HTTP/3-capable QUIC library. Do not interpret that option error as evidence about the website.

Tolerant probe (not proof by itself)

You can allow fallback with:

curl --http3 -I https://example.com/

This mode can use HTTP/3 and fall back to HTTP/2 or HTTP/1.1. It is useful for checking general connectivity, but a successful transfer alone does not prove HTTP/3. Use the strict command or a protocol/version indicator when the result matters.

Follow redirects deliberately

Without redirect following, curl tests the URL you supplied and reports its response. To test the final destination as well, add -L:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl --http3-only -I -L https://example.com/

Every hop still has to be reachable over HTTP/3 for a strict all-hops test. If a redirect target does not support HTTP/3, the command fails even when the first host does. Test each hostname separately when that distinction matters.

Method 2: verify HTTP/3 in browser DevTools

Chrome or Chromium

  1. Open the target https:// URL.
  2. Open DevTools (for example, F12 or Ctrl+Shift+I).
  3. Select Network.
  4. Open the column chooser, enable Protocol, and reload the page.
  5. Inspect the document request and important assets. A value of h3 means that request negotiated HTTP/3.

Keep the protocol column visible while testing individual requests. A page can contain resources from several hostnames, and each origin negotiates independently.

Why the first reload may show h2

Browser discovery is opportunistic. On a first visit, the browser may use HTTP/2, receive an Alt-Svc mapping, cache that mapping, and try HTTP/3 on a later request. Reload after the first response and check the protocol again. A browser can still remain on HTTP/2 when QUIC is disabled, UDP is blocked, a proxy intervenes, or policy prevents the upgrade.

Method 3: inspect the Alt-Svc advertisement

Fetch headers with an ordinary HTTPS request:

curl -I https://example.com/

Look for a line like:

Alt-Svc: h3=":443"; ma=86400

The h3 token and port advertise an equivalent HTTP/3 service. RFC 9114 describes this as an origin advertising the availability of an equivalent HTTP/3 endpoint through the Alt-Svc response header field. The header is a capability hint, not a success report: the advertised QUIC service could be unreachable, misconfigured, certificate-invalid, rate-limited or blocked in transit. Confirm it with --http3-only or DevTools.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Method 4: test from an independent network

An online HTTP/3 checker such as HTTP3Verify (an external HTTP/3 checker) can perform negotiation from outside your network and show selected ALPN identifiers and response headers. Use an external result as a second vantage point, not as a replacement for a local test: your office firewall, VPN, ISP or proxy may have a different UDP policy than the checker.

For an important diagnosis, compare three observations: strict curl on your network, the browser’s protocol column, and an external probe. Agreement indicates a broad result; disagreement usually identifies a client or network-path issue rather than a simple yes/no property of the site.

How to interpret common outcomes

Observation What it establishes Next action
curl --http3-only returns headers This client completed an HTTP/3 request to that URL. Record the hostname, URL and time; test redirects or other hosts separately.
Strict curl fails, but Alt-Svc is present The origin advertises HTTP/3, but your attempted QUIC connection did not complete. Check UDP/443 reachability, TLS/certificate errors, proxies and server configuration.
Browser shows h2 on the first load It may not yet have learned the Alt-Svc mapping. Reload after discovery, then check QUIC and network policy.
Browser remains on h2, strict curl succeeds HTTP/3 works for curl, but the browser path or settings differ. Check browser QUIC settings, extensions, proxy/VPN and UDP blocking.
Only one asset shows h3 Negotiation differs by hostname, CDN, redirect hop or third-party origin. Test the document and each relevant hostname directly.
Plain http:// URL cannot use the normal HTTP/3 procedure The standard direct procedure applies to HTTPS origins. Test the HTTPS endpoint and its redirect behavior.

Automating the strict check

Shell and cURL

For a script, make curl’s exit status visible and capture headers:

Rank #3
Sale
HTTP: The Definitive Guide
  • Used Book in Good Condition
set -o pipefail
curl --http3-only -sS -D headers.txt -o /dev/null https://example.com/
status=$?
printf 'curl exit status: %sn' "$status"
cat headers.txt

A zero exit status means the strict request completed; a nonzero status requires investigating the error text and network conditions. The response status itself is not a guarantee that every page asset used HTTP/3.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Python wrapper

Python’s standard library does not provide a portable HTTP/3 client, so call an HTTP/3-enabled curl binary and preserve its result:

import subprocess

url = "https://example.com/"
result = subprocess.run(
    ["curl", "--http3-only", "-I", "--silent", "--show-error", url],
    text=True,
    capture_output=True,
)
print(result.stdout)
if result.returncode:
    raise SystemExit(f"HTTP/3 request failed: {result.stderr.strip()}")

This tests the curl installed on the machine running the script; verify that machine’s build with curl -V.

Node.js wrapper

Node.js can likewise invoke the system curl binary:

import { execFile } from "node:child_process";

execFile("curl", ["--http3-only", "-I", "--silent", "--show-error", "https://example.com/"], (error, stdout, stderr) => {
  if (error) {
    console.error(stderr.trim());
    process.exit(error.code || 1);
  }
  console.log(stdout);
});

This is intentionally a wrapper rather than a claim that the built-in Node HTTP client negotiates HTTP/3. The curl binary remains the component performing QUIC.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting HTTP/3 tests

“Option –http3-only is unknown”

Your curl lacks HTTP/3 support. Install or build an HTTP/3-capable version, then rerun curl -V. A newer-looking version number alone is not enough; the build must include the relevant feature.

Strict curl fails while a normal curl succeeds

Normal curl may have used HTTP/2 or HTTP/1.1. Retry with --http3-only and read the specific QUIC, TLS or connection error. Check whether UDP port 443 is blocked by a firewall, VPN, proxy or provider. Also consider an unreachable or incorrectly configured QUIC endpoint.

Alt-Svc is advertised but negotiation fails

The header proves only that the origin announced an alternative service. Verify that the advertised port is reachable, the certificate covers the hostname, and intermediaries are not filtering UDP. Compare with an external probe to separate a local path problem from an origin problem.

The browser never shows h3

Reload after the first response so the browser can learn Alt-Svc. Then inspect browser QUIC settings, enterprise policy, proxies, VPNs and UDP/443 filtering. A successful strict curl result proves the site can work over HTTP/3 for that client path, not that every browser path will choose it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Only some requests use h3

Protocol negotiation is per connection and origin. A redirect host, CDN hostname or third-party domain may support a different protocol. Filter the Network panel by hostname and test each relevant URL directly.

Performance, reliability and testing limits

HTTP/3 support is path-dependent. A server can advertise it while a particular network blocks UDP, and a browser can intentionally use HTTP/2 even when HTTP/3 is available. Record the URL, hostname, client build, network (including VPN or proxy), and whether the result came from an advertisement or a negotiated request. Repeat from another network when the result affects deployment or incident diagnosis.

Do not treat a single protocol result as a universal performance benchmark. These procedures establish negotiation and reachability; they do not measure page speed, loss recovery or application latency. Test the exact routes and assets your users depend on.

Or skip the browser setup

If your goal is a clean visual capture after checking a site, ScreenshotNeo provides a one-call screenshot API. It accepts the page URL and can return PNG, JPEG, WebP or PDF; it is separate from protocol negotiation, so use curl or DevTools above to establish HTTP/3 support.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

See the ScreenshotNeo API documentation for parameters and options. A basic call is:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

ScreenshotNeo accepts cookie or consent banners before capture and removes more than 60 known consent platforms, newsletter popups and chat widgets; each cleanup step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and the response identifies the page verdict and billing result in X-Page-Verdict and X-Billed headers. Its MCP server includes take_screenshot, get_page_info and capture_pdf for Claude, Cursor and other MCP clients. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots. Create a free ScreenshotNeo account to try it.

Frequently Asked Questions

Does an Alt-Svc header mean HTTP/3 is enabled for every visitor?

No. It advertises an alternative service; UDP reachability, client support, TLS validation and network policy still determine whether a request negotiates HTTP/3.

Should I test the website’s IP address instead of its hostname?

No. HTTP/3 testing should use the HTTPS hostname because TLS certificates, Alt-Svc and origin routing are hostname-dependent.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can a site support HTTP/3 for the document but not its assets?

Yes. Assets may come from different hostnames, CDNs or redirect targets, each with its own negotiation result.

Quick Recap

SaleBestseller No. 3
HTTP: The Definitive Guide
HTTP: The Definitive Guide
Used Book in Good Condition
$26.04
SaleBestseller No. 4
HTTP Pocket Reference: Hypertext Transfer Protocol
HTTP Pocket Reference: Hypertext Transfer Protocol
Used Book in Good Condition
$6.94
Bestseller No. 5

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.