ERR_CONNECTION_CLOSED

ERR_CONNECTION_CLOSED means the conversation ended mid-sentence. The browser opened a connection, sent its request, and then the other end shut the connection down before answering. Not a refusal, not a timeout, and not an error page: an orderly close at a moment when the browser was still waiting for the first byte of a reply.

Updated August 2026 · 7 min read

  • Written by

    Andrian Valeanu Andrian Valeanu Founder of Pulsetic

    Andrian Valeanu founded Pulsetic and, before it, Designmodo. Across 15-plus years he has shipped web products, design tools, and monitoring software teams around the world rely on.

  • Reviewed by

    Ionut Caval Ionut Caval Technical reviewer

    Ionut Caval reviews Pulsetic's technical guides for accuracy. He works hands-on with web servers, networking, and uptime monitoring day to day, and makes sure the causes and fixes here hold up in production.

The short version: Reload once, since a single closed connection is often transient. If it persists, test in an incognito window and with any HTTPS-scanning security software disabled, because both extensions and TLS inspection cause this. If you run the website, compare your proxy's response timeout against how long the failing page actually takes: a close that only affects slow pages is a timeout, not a fault.

Key takeaways

  • ERR_CONNECTION_CLOSED is Chromium net error -100. The connection was closed unexpectedly while the browser was still waiting for data, so no HTTP response ever arrived.
  • It is an orderly TCP FIN rather than an abrupt RST, which is what distinguishes it from a reset. Something chose to end the connection instead of something breaking it.
  • That politeness usually points at software with a timeout: a reverse proxy, a load balancer, or an HTTPS-inspecting security product ending the connection deliberately.
  • A 502 is not the same failure. A 502 means the proxy survived and reported the problem over HTTP; a closed connection means nothing survived long enough to answer at all.
  • When only the slow or heavy pages fail, the cause is almost always a response timeout in the chain rather than anything intermittent.
Error type
Browser connection error (Chromium net error -100)
Whose side
Either: the server chain, or a local security tool
Fix difficulty
Moderate
Common cause
The connection closed before any response arrived

How did you find out this time?

Pulsetic is website uptime monitoring. It checks your URL from outside your network as often as every 30 seconds, confirms any failure from another region, then emails you.

10 monitors free, email alerts on failure and recovery. No credit card.

What does ERR_CONNECTION_CLOSED mean?

ERR_CONNECTION_CLOSED is Chromium net error -100, and it describes a very specific moment in a request. The browser resolved the name, opened a TCP connection, completed the TLS handshake if the page was HTTPS, and sent its request. Then, before any response headers came back, the other end closed the connection. Because it closed rather than reset, the shutdown was orderly: a TCP FIN rather than an RST. Something on the other side decided to end the conversation, which is a meaningfully different situation from something breaking it.

That distinction is the most useful thing about this error. Deliberate closes come from software making a decision, and the software that makes such decisions is almost always sitting between the browser and the application. A reverse proxy or load balancer that hits its response timeout will close the connection to the client. A security product inspecting HTTPS terminates the original connection to do so, and closes it if its own inspection fails. The application itself is a less common cause, because a running application usually manages to return a 500 or a 502 instead. When you see this error, the layer to suspect is the one in the middle.

YouDNSNetworkCDN / ProxyWeb serverApp / DB
The path a request takes from your browser to the website's servers. An ERR_CONNECTION_CLOSED is produced at the highlighted stages.
-100
The Chromium net error number behind this message, defined in net_error_list.h
FIN
The orderly TCP close that distinguishes this from a reset, which sends RST instead
60 s
A common default proxy read timeout, and the usual reason slow pages close while fast ones do not

How the ERR_CONNECTION_CLOSED error appears

The wording changes depending on your browser, device, or server. Here is how this error commonly shows up:

What an ERR_CONNECTION_CLOSED looks like in the browser. The exact wording varies by browser, device, and server.
  • ERR_CONNECTION_CLOSED
  • net::ERR_CONNECTION_CLOSED
  • The connection was closed unexpectedly
  • This site can't be reached, the connection was reset or closed
  • Empty reply from server
  • Connection closed by peer

Closed, reset, empty and 502

These four are easy to confuse because all of them interrupt a request, and each points at a different layer.

Error What it means Who fixes it
ERR_CONNECTION_CLOSED The connection was closed in an orderly way before any response arrived, usually by software deciding to end it. The website owner, by adjusting proxy timeouts, or you, by disabling HTTPS inspection.
ERR_CONNECTION_RESET The connection was cut abruptly with a TCP reset, typically by a firewall or a process that died. Either side, depending on which firewall or process sent the reset.
ERR_EMPTY_RESPONSE The connection closed having returned nothing at all, so the backend never wrote a reply. The website owner, by fixing whatever crashed before responding.
502 Bad Gateway The proxy survived and reported over HTTP that its upstream misbehaved. The website owner, by fixing the upstream service.

How a connection ends, and what each ending means

The browser reports these separately because the underlying TCP behaviour differs, and each points somewhere different.

ErrorTCP behaviourUsual source
ERR_CONNECTION_CLOSEDOrderly FIN at an unexpected momentA proxy or security tool ending it deliberately
ERR_CONNECTION_RESETAbrupt RSTA firewall, middlebox, or a process that died
ERR_EMPTY_RESPONSEClosed having sent nothing at allA backend that crashed before writing a reply
ERR_CONNECTION_TIMED_OUTNothing came back before the clock ran outA silent firewall or an overloaded server

What causes ERR_CONNECTION_CLOSED?

  • A reverse proxy or load balancer hitting its response timeout and closing the connection, which is why heavy pages fail while light ones succeed.
  • A security suite or antivirus inspecting HTTPS traffic, which terminates the original connection and closes it when inspection fails or times out.
  • A browser extension that proxies or rewrites requests, which is why the page often works in an incognito window.
  • Keep-alive mismatches, where the server closes an idle connection at the moment the browser reuses it, so the request lands on a socket already being shut down.
  • An application or worker process that exits while handling the request, closing its socket without writing a response.
  • MTU or fragmentation problems on the path, especially over VPNs, where large responses fail while small ones succeed.
  • A corporate proxy or content filter terminating connections it cannot inspect or classify, which affects one network only.

How to find the cause fast

  1. Note whether it is all pages or only slow ones. Only slow pages failing is a timeout, and that alone narrows the search to the proxy layer.
  2. Try an incognito window with extensions disabled. Working there points at an extension or at cached state in your normal profile.
  3. Disable HTTPS scanning in your security software specifically, rather than the whole product, and retest.
  4. Run curl -v and watch where it stops. A connection closing after the request but before any headers confirms the failure is below HTTP.
What an ERR_CONNECTION_CLOSED looks like from the command line. The grey lines starting with # are explanatory comments.

How ERR_CONNECTION_CLOSED looks from the outside

This failure produces no HTTP status code, which is exactly what makes it easy to miss. A monitor that only checks whether the host answers may well see a successful connection on a light path while the pages that matter are being closed mid-response, and a check that treats any answer as success will not notice at all. Because the usual cause is a timeout, the failure also correlates with load: it appears when responses slow down and disappears when they speed up, which makes it intermittent in exactly the way that defeats manual testing. Checking the URLs that actually take time, and alerting on the response rather than the connection, is what surfaces it.

How to fix ERR_CONNECTION_CLOSED

If you are a visitor

  1. Reload the page once. A single closed connection is often transient and does not recur.
  2. Open the page in an incognito window. If it works there, an extension or cached state in your normal profile is responsible.
  3. Disable HTTPS or SSL scanning in your antivirus or security suite, which is one of the most common local causes of this error.
  4. Turn off extensions one at a time, paying particular attention to anything that proxies, filters, or rewrites traffic.
  5. Try a different network. A failure that follows you is server-side or browser-side; one that does not is equipment on that network.
  6. Disconnect any VPN, which can also introduce MTU problems that break large responses while small ones succeed.
  7. If only one website is affected and it fails everywhere you try, the problem is on their side and there is no local fix.

If you run the website

  1. Compare your proxy or load balancer response timeout against how long your slowest legitimate responses take. A mismatch here is the single most common cause.
  2. Align keep-alive timeouts so the server does not close idle connections at the moment a client reuses them. The server's idle timeout should exceed the load balancer's.
  3. Check application and worker logs for processes exiting mid-request, which closes the socket without writing a response.
  4. Look for out-of-memory kills or worker recycling that terminates requests in flight, particularly on the heaviest endpoints.
  5. Test the failing endpoints with curl -v from outside your network to see exactly where in the exchange the connection ends.
  6. Return a real error status where you can. A 502 or 504 is far easier for a visitor and for your own logs than a bare closed connection.

Still not fixed? Next steps

  • Check whether the failure tracks page weight. If the slow endpoints fail and the light ones do not, look for a response timeout in the proxy or load balancer rather than for a fault.
  • Reproduce it with curl -v. Seeing the connection close after the request is sent but before headers arrive confirms the failure is below HTTP, which rules out application-level causes.
  • Test with HTTPS inspection disabled in any security suite. These products terminate and re-establish TLS, and a failure inside that layer surfaces exactly like this.
  • Compare a different network. A close that follows you across networks points at the server or the browser profile; one that only occurs on a single network points at equipment there.
  • On the server side, check proxy timeouts and keep-alive settings against how long your slowest legitimate responses take, since the mismatch between them is the usual root cause.

Code & configuration

Copy-paste starting points. Replace example.com and the paths with your own, and test changes on staging before production.

See exactly where the connection ends

curl -v https://example.com/slow-report
# > GET /slow-report HTTP/1.1
# * Empty reply from server
# request sent, connection closed before any response header

Raise the proxy timeout to match a slow endpoint

# nginx: default read timeout is 60s
location /reports/ {
  proxy_pass          http://app;
  proxy_read_timeout  180s;
  proxy_send_timeout  180s;
}
# raise deliberately, and only for the paths that need it

Keep the upstream idle timeout above the balancer's

# if the server closes idle connections first, the balancer reuses
# a socket that is already shutting down and the client sees a close
# balancer idle timeout : 60s
# server keepalive_timeout: 75s   <- must be the longer of the two

How to prevent ERR_CONNECTION_CLOSED

A closed connection returns no status code at all, so a check that merely confirms the host answers will report the website up while the pages people actually use are being cut off. It is worse than that in practice, because the usual cause is a timeout: the failure appears under load and vanishes when you go looking for it. Pulsetic checks your website and endpoints from multiple locations every 30 seconds and alerts you by email, SMS, voice call, Slack, Discord, Telegram, or webhook when a URL stops returning what you expect, so a proxy quietly closing your slowest pages shows up as a pattern rather than as scattered complaints.

Learn how Pulsetic's uptime monitoring detects this from the outside, across 15+ locations.

Sources and further reading

The specifications and vendor documentation this guide is written from, plus deeper reading on the parts it only summarises.

Frequently asked questions

  • What does ERR_CONNECTION_CLOSED mean?

    It means the connection to the server was closed before any response arrived. The browser had already resolved the name, opened the connection, and sent its request, so the failure happened late in the exchange but still below HTTP. Because the close was orderly rather than an abrupt reset, something chose to end the connection, which usually points at a proxy, load balancer, or security product rather than at a crash.

  • How is this different from ERR_CONNECTION_RESET?

    The difference is in how TCP ended the connection. A reset is an RST packet, an abrupt termination typically sent by a firewall, a middlebox, or a process that died. A close is an orderly FIN, meaning the other end shut down the connection properly, just at a moment when the browser was still expecting data. Resets suggest something broke; closes suggest something decided.

  • How do I fix ERR_CONNECTION_CLOSED?

    As a visitor, reload once, then try an incognito window and disable HTTPS scanning in your security software, since those are the two most common local causes. As the website owner, compare your proxy's response timeout against how long the failing pages take: if only the slow ones fail, that mismatch is your answer, and raising the timeout for those paths fixes it.

  • Why do only some pages fail?

    Because pages differ in how long they take, and timeouts do not care about anything else. A slow report or a large export can outlast a proxy's response timeout while lighter pages finish well inside it. If you can predict which pages fail by how heavy they are, you are almost certainly looking at a timeout rather than at an intermittent fault, and that makes it straightforward to fix.

  • Is ERR_CONNECTION_CLOSED the same as a 502 error?

    No. A 502 Bad Gateway is an HTTP response, which means the proxy stayed up long enough to talk to your browser and tell you its upstream misbehaved. This error means no HTTP response arrived at all, because the connection ended first. Returning a 502 is actually the better outcome: it means the failure was handled and reported rather than leaving the browser with nothing.

  • Can antivirus software cause this?

    Yes, and it is one of the most frequent causes on an otherwise healthy connection. Security products that inspect HTTPS have to terminate the original connection and create their own, and when that process fails or mishandles a modern TLS feature, the browser sees the connection close unexpectedly. Disabling the HTTPS-scanning feature specifically, rather than the entire product, is usually enough to confirm it.

  • Why does the page load in incognito mode?

    Incognito windows run without most extensions and with a separate cache and cookie store. If a page loads there but not in your normal window, something in your usual profile is responsible, most often an extension that proxies or rewrites requests. Re-enabling extensions one at a time in the normal window will identify which, and a corrupted cache entry is the other likely candidate.

  • What is the difference between ERR_CONNECTION_CLOSED and ERR_CONNECTION_RESET?

    Both end a connection early, but they end it differently at the TCP level. A reset is an abrupt RST packet, the network equivalent of hanging up mid-sentence, and it usually comes from a firewall, a middlebox, or a process that died. A close is an orderly FIN: the other end shut the connection down politely, just at a moment when the browser was still expecting data. That politeness is the clue. A close normally comes from software choosing to end the connection, such as a proxy hitting a timeout, rather than from something breaking.

  • Why does it only happen on some pages of a website?

    Because the pages differ in how long they take or how much they return, and both interact with timeouts. A slow report, a large export, or an endpoint that streams output can outlast a proxy's response timeout and get closed while smaller pages finish comfortably inside it. If the failing pages are consistently the heavy ones, you are looking at a timeout somewhere in the chain rather than at anything intermittent.

  • Can antivirus or a security suite cause this?

    Regularly, and it is one of the most common local causes. Products that inspect HTTPS insert themselves into the connection and terminate the original one to do it. When their inspection fails, mishandles a modern TLS feature, or simply times out, the browser sees the connection close unexpectedly. Testing with the HTTPS-scanning feature disabled, rather than the whole product, is usually enough to identify it.

  • Is this the same as a 502 Bad Gateway?

    No, and the difference tells you where the failure was noticed. A 502 is an HTTP response: the reverse proxy stayed up, spoke to the browser, and reported that its upstream misbehaved. ERR_CONNECTION_CLOSED means no HTTP response arrived at all, because the connection ended before one could be sent. Getting a 502 means the proxy handled the failure. Getting a connection closed means the failure happened underneath HTTP.

  • Why does it work in incognito mode?

    Incognito windows run without most extensions and with a separate cache and cookie store, so a page that works there points at something in your normal profile. An extension that rewrites or proxies requests is the usual explanation, and a corrupted cache entry or an oversized cookie set can do it too. Disabling extensions one at a time in your normal window is the way to find the specific one.

Trusted by teams at companies around the world