Skip to content
RU

ERR_QUIC_PROTOCOL_ERROR: How to Fix the HTTP/3 (QUIC) Error

What it means: Chrome's HTTP/3 connection over UDP (QUIC) broke after the response had started, so it could not retry over TCP.

  1. Reload the page once
  2. Try another network or disconnect the VPN
  3. Test with QUIC disabled in chrome://flags
  4. Fails everywhere? Allow UDP 443 to the server
  5. Fix or remove the Alt-Svc h3 advertisement

Test your URL now

Tests which of HTTP/1.1, HTTP/2 and HTTP/3 your server actually negotiates.

Test HTTP/2 and HTTP/3 →

What ERR_QUIC_PROTOCOL_ERROR means

ERR_QUIC_PROTOCOL_ERROR is Chromium net error -356, "There is a QUIC protocol error." QUIC (RFC 9000) is the UDP-based transport under HTTP/3 (RFC 9114), with TLS 1.3 built into its handshake. Chrome learns that a site offers HTTP/3 from an Alt-Svc: h3=":443" response header, then races QUIC against a normal TCP connection on later requests.

Chrome hides most QUIC failures. If the QUIC session fails before response headers arrive, Chrome marks the HTTP/3 endpoint as broken and silently retries the request over TCP. The error reaches the page when the session dies after headers were received (mid-download) or when retries are exhausted. Any QUIC connection close at that moment, whether an idle timeout, a peer error or UDP packets that stopped arriving, is reported to the request as this code. It is not a DNS failure and not a certificate error: certificate problems produce ERR_CERT_* codes instead.

Causes in Chrome, Edge, Firefox and Safari

BrowserWhat you seeMost common trigger
Chrome"This site can't be reached" or a failed request in DevTools with ERR_QUIC_PROTOCOL_ERRORUDP traffic dropped or altered mid-connection
EdgeThe same Chromium codeSame as Chrome
FirefoxIts own wording, not this codeThe same network or server fault, if HTTP/3 is in use
SafariIts own wording, not this codeThe same network or server fault, if HTTP/3 is in use

On the network side, the usual triggers are firewalls, VPN clients and security products that let the first UDP packets through and then drop or rate-limit the flow, and tunnels with a small MTU. RFC 9000 requires paths to carry UDP datagrams of at least 1200 bytes; a path that cannot breaks QUIC while TCP keeps working.

On the server side: a QUIC listener behind a load balancer that sends packets of one connection to different backends, a server that advertises h3 in Alt-Svc on a port where QUIC is not reachable, or an experimental HTTP/3 stack that closes connections on valid traffic. Because Chrome remembers the advertisement for the ma lifetime, a broken HTTP/3 endpoint can keep producing errors after you change other settings.

Behind Cloudflare, nginx or another proxy

With Cloudflare, HTTP/3 only covers the hop between the visitor and Cloudflare; Cloudflare does not use HTTP/3 to your origin. The toggle is in Speed > Settings > Protocol Optimization > HTTP/3 (with QUIC). If visitors on certain networks report this error, switching it off is a valid test: Cloudflare then stops advertising HTTP/3 and browsers use HTTP/2.

On your own nginx (1.25.0 or later, built with --with-http_v3_module), QUIC needs a UDP listener next to the TCP one and an explicit advertisement:

server {
    listen 443 quic reuseport;     # UDP, HTTP/3
    listen 443 ssl;                # TCP, HTTP/1.1 and HTTP/2
    http2 on;
    server_name example.com;

    ssl_certificate     /etc/nginx/certs/example.com.crt;
    ssl_certificate_key /etc/nginx/certs/example.com.key;

    # Advertise HTTP/3 only after UDP 443 is reachable from outside
    add_header Alt-Svc 'h3=":443"; ma=86400';
}

Open UDP 443 in every layer: host firewall (ufw allow 443/udp or firewall-cmd --permanent --add-port=443/udp), cloud security group and any hardware firewall. If you enable quic_retry, set quic_host_key as well; without it nginx generates a new key on every reload and rejects tokens issued with the old one. A UDP load balancer in front of several QUIC servers must keep each connection on one backend.

If you own the site

  1. Check the advertisement. curl -sI https://example.com/ | grep -i alt-svc. Every port listed after h3= must accept QUIC from the public internet.
  2. Test HTTP/3 directly. curl --http3-only -sv -o /dev/null https://example.com/ (needs a curl build with HTTP/3). Compare with curl --http2 -sv -o /dev/null https://example.com/.
  3. Test from more than one network. A failure only from one office or mobile carrier points to UDP filtering on that path, not to your server.
  4. Log the protocol. Add the $http3 variable to the nginx access log format, as the nginx documentation example does, to see which requests arrive over h3 and which clients stay on TCP.
  5. Capture a NetLog. Record with chrome://net-export; the QUIC_SESSION_CLOSED event names the QUIC error code, such as QUIC_NETWORK_IDLE_TIMEOUT or QUIC_TOO_MANY_RTOS.
  6. Roll back cleanly if needed. Send Alt-Svc: clear for a while instead of just removing the header, so browsers drop the cached HTTP/3 endpoint without waiting for ma to expire.

If you are a visitor

Reload once: Chrome often marks the QUIC endpoint as broken and the retry goes over TCP. If the error comes back, try another network or disconnect the VPN, and pause the web-protection feature of your antivirus, since these are the most common things that interfere with UDP. As a diagnostic, set chrome://flags/#enable-quic ("Experimental QUIC protocol") to Disabled and relaunch; if the site then works, QUIC on your path is the problem. In Firefox the equivalent switch is network.http.http3.enable in about:config. Managed Chrome installs can be controlled with the QuicAllowed policy.

Clearing the cache does not help; the error is not cached. If the site fails on every network and device, the server's HTTP/3 setup is at fault and only the owner can fix it.

How to confirm the fix

curl --http3-only -sv -o /dev/null https://example.com/
# expect: < HTTP/3 200
curl -sI https://example.com/ | grep -i alt-svc

In Chrome DevTools, add the Protocol column in the Network panel and check that requests show h3 without failures. To see from outside which protocols the server negotiates and what it advertises, use the HTTP/2 and HTTP/3 protocol test.

Related errors

TLS 1.2 / 1.3Supported protocol versions
Cipher SuitesCryptographic algorithms and security
HTTP/2 + HTTP/3Support for modern protocols
Legacy TLSSSL 2.0/3.0 and TLS 1.0/1.1 vulnerabilities

Why teams trust us

TLS 1.3
supported
HTTP/2
ALPN check
BEAST
vulnerability detection
Free
no limits

How it works

1

Enter domain

2

Test TLS/HTTP versions

3

Get protocol report

Why test protocols?

Protocol testing checks which TLS versions the server supports. Legacy versions (TLS 1.0, SSL 3.0) have known vulnerabilities and must be disabled.

TLS Versions

Check TLS 1.0, 1.1, 1.2, 1.3 support — with security rating for each.

Cipher Suites

List of supported cipher algorithms with strength rating for each.

HTTP/2 Support

ALPN negotiation check for HTTP/2 (h2) and HTTP/3 (h3) via QUIC.

Vulnerabilities

Detection of BEAST, POODLE, DROWN, and other TLS/SSL attacks.

Who uses this

DevOps

TLS configuration check

Security

protocol and cipher audit

Developers

HTTP/2 compatibility

SEO

HTTPS ranking signal

Common Mistakes

Leaving TLS 1.0 and 1.1Both are deprecated and vulnerable to BEAST, POODLE attacks. Browsers dropped support in 2020.
Weak cipher suitesRC4, DES, and 3DES must be disabled. Use AES-GCM and ChaCha20.
Not supporting TLS 1.3TLS 1.3 is faster and more secure. All modern servers should support it.
Ignoring HSTSWithout HSTS, the browser may attempt HTTP connection. HSTS forces HTTPS.

Best Practices

Enable only TLS 1.2 and 1.3This covers 99%+ of users and provides modern security levels.
Use PFS ciphersPerfect Forward Secrecy (ECDHE) protects past sessions even if the key is compromised.
Check after nginx/Apache updateUpdates can change default ciphers. Always check after updating.
Test with different clientsEnsure old mobile devices and IE11 can connect if needed.

Monitor SSL certificate automatically

SSL monitor alerts 30 days before expiry and on TLS version changes.

Sign up free

Learn more

Sources

Frequently Asked Questions

Is it safe to disable QUIC in Chrome?

Yes. Chrome falls back to HTTP/2 or HTTP/1.1 over TCP with the same TLS security; you only lose HTTP/3 performance benefits. Use it as a test and turn it back on once you know the cause.

Why does it happen only on my office or school network?

Many managed networks block or inspect UDP 443. When the filtering starts after the connection is up, Chrome cannot fall back cleanly and shows this error.

Why do errors continue after I fixed or disabled HTTP/3 on the server?

Chrome remembers the Alt-Svc h3 advertisement for its ma lifetime. Send Alt-Svc: clear for a while so browsers drop the cached HTTP/3 endpoint; relaunching Chrome also resets its QUIC state.

Why don't Firefox or Safari show this code?

The code belongs to Chromium's network stack. Other browsers report the same failed HTTP/3 connection in their own wording.

Should I turn off HTTP/3 on my server?

Only if UDP 443 cannot be made reliably reachable or your HTTP/3 stack misbehaves. A correct setup with UDP open and an accurate Alt-Svc header works for most visitors, and TCP stays available as the fallback.

Try the live tool that powered this guide

Free plan — 10 monitors, checks every 5 min, no card required. Upgrade for 1-minute interval and multi-region monitoring.