
What it means: A Chromium component that checks the HTTP status itself got a non-2xx answer, often a 4xx/5xx with an empty body.
chrome://net-exportFree online tool — HTTP header checker: instant results, no signup.
Requests the address and shows the status code and what the server sends back.
net::ERR_HTTP_RESPONSE_CODE_FAILURE is Chromium network error -379: the server returned a non-2xx status to a caller that inspects the status code itself. Chromium's own comment in net_error_list.h is explicit: the error «is only used by certain APIs that interpret the HTTP response itself. URLRequest for instance just passes most non-2xx response back as success». DNS, TCP and TLS all worked; the decision is made after a response has arrived, by reading its status line.
Two mechanisms raise it. The first is SimpleURLLoader: with allow_http_error_results left at its default of false, «if a non-2xx result is received (other than a redirect), the request will fail with net::ERR_HTTP_RESPONSE_CODE_FAILURE without waiting to read the response body, though headers will be accessible through response_info()» (simple_url_loader.h). Components that fetch a URL outside normal page loading use it and treat a bad status as fatal. The second is the main-frame navigation check in http_error_navigation_throttle.cc: when a top-level page answers 400 or higher, Chrome has its own error page for that status and the response body is empty, Chrome cancels the navigation and shows that page instead. It is not a TLS error, not a 404 on a stylesheet or image inside a normal page (DevTools simply shows the 404), and not something a CDN purge fixes unless the CDN is what answers non-2xx to the failing request.
| Browser | What you see | Most common trigger |
|---|---|---|
| Chrome, Edge (page load) | Chrome's own error page ending in HTTP ERROR 500, HTTP ERROR 404 and so on | The page answered 4xx/5xx with an empty body |
Chrome, Edge (PAC script fetch, pac_file_fetcher_impl.cc) | Proxy auto-config never loads; corporate network or VPN fails to come up | The PAC URL answered anything other than exactly 200 |
Chrome, Edge (certificate fetch, AIA / CRL, cert_net_fetcher_url_request.cc) | Chain building or revocation check fails | The issuer or CRL URL answered anything other than 200 |
Chrome, Edge (extension update, extension_downloader_delegate.cc) | The extension silently stops updating | The update URL answered non-2xx; the HTTP code is carried with the failure |
| Android WebView, Cast shells | «Webpage not available» instead of the app | The shell navigated to a URL that answered non-2xx |
| Playwright, Puppeteer (Chromium) | The test fails at navigation, not at an assertion | The navigation target did not answer successfully |
| Firefox, Safari | No -379; an empty error response shows as a blank page or the browser's own wording | The same non-2xx status, visible in the Network panel |
Note the strictness of the PAC and certificate fetchers: both compare against 200 exactly, so a 204 is enough to fail them. Both follow redirects, so what counts is the status of the final response: a redirect that ends on an SSO or captive-portal page answering 403 or 404 fails the fetch, because the fetcher wanted a script or a certificate, not a login form. A PAC server that asks for credentials (401) also aborts the fetch, with a different error code, because Chromium does not authenticate PAC downloads. The certificate fetcher only fetches plain http:// URLs.
The page-load case is the one ordinary visitors meet. Many frameworks answer an unhandled error with a bare 500 and no body; Chrome then replaces the empty page with its own. If the server sends any body at all, even a one-line HTML error page, Chrome renders that instead and the -379 page does not appear.
A proxy matters here in two ways: it may be what answers non-2xx to a subset of clients (a WAF rule, geo block, bot score or basic-auth gate that hits a WebView, a CI runner or a PAC fetch but not your desktop browser), and it decides whether an empty upstream error reaches the browser. With nginx, proxy_intercept_errors replaces an upstream's empty 5xx with your own error page, which also removes Chrome's -379 page for real visitors:
location / {
proxy_pass http://app;
proxy_intercept_errors on;
error_page 500 502 503 504 /50x.html;
}
location = /50x.html {
root /usr/share/nginx/html;
internal;
}
# Serve a PAC file outside any auth gate
location = /proxy.pac {
auth_basic off;
default_type application/x-ns-proxy-autoconfig;
root /var/www/pac;
}On Cloudflare, check Security Events for the failing URL and client: a block there returns 403 to exactly the clients that report -379, while your own tests pass.
chrome://net-export, start logging to disk, reproduce, stop, open the file in the NetLog viewer and search for HTTP_RESPONSE_CODE_FAILURE or -379; the surrounding events carry the request URL and response headers. On Android, attach to the WebView from desktop Chrome via chrome://inspect and read the Network panel; adb logcat shows the shell-level failure but usually not the URL.curl -s -o /dev/null -w '%{http_code} %{size_download}\n' https://example.com/path
# 500 0 -> error status with an empty bodyerror_page as above).curl -i --noproxy '*' http://proxy.example.com/proxy.pacopenssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
| openssl x509 -noout -text | grep -A2 -E 'Authority Information Access|CRL Distribution'If chain building still fails, see ERR_CERT_AUTHORITY_INVALID.update_url behind an auth gate produces this error and nothing else visible. It must answer 2xx.In most cases the fault is not on your side: the server, or a proxy in front of it, answered with an error status. Reload once in case it was a transient 5xx, then try another network or mobile data to rule out a network-specific block. Clearing the browser cache does not help, because the server answered the request fresh.
If the failure is on a corporate network and many sites fail at once, the PAC proxy script probably did not load: that is for your IT team, and the error in chrome://net-export shows them the PAC URL. If an app built on Android WebView shows «Webpage not available», report it to the app developer with your network and region; reinstalling rarely changes what the server answers.
Re-run the request and require a 2xx, or at least a non-empty body for an error page:
curl -s -o /dev/null -w '%{http_code} %{size_download}\n' https://example.com/path
# 200 18342Then repeat the original scenario with chrome://net-export running and confirm -379 no longer appears. To see the status code and headers a URL returns from outside your network, use the HTTP status checker.
No. Error -379 is decided by reading an HTTP status line, with no TLS in the path. The one certificate-adjacent case is Chrome fetching an AIA or CRL URL during validation: there the failing request is a plain HTTP fetch of the issuer certificate or revocation list, not the handshake.
Because ordinary resource loads do not use an API that interprets the status. Chromium states that URLRequest just passes most non-2xx responses back as success, so you get a 404 in DevTools instead.
Your server sent the 500 with an empty body, so Chrome cancelled the navigation and rendered its own page with -379. Send any error body and Chrome shows it instead.
Capture a NetLog: chrome://net-export, start logging, reproduce, stop, then search the file for HTTP_RESPONSE_CODE_FAILURE. The request URL and response headers sit in the surrounding events. On Android WebView, attach via chrome://inspect and use the Network panel.
That pattern has been reported and never reproduced upstream (Capacitor issue #4743 was closed for lack of a reproduction). It means the failing request differs between those installs, so capture the URL from an affected device before changing app code: a WAF rule, a geo restriction or a staged rollout answering non-2xx to a subset of clients all produce exactly this.
Navigation could not get a successful response from the target. Check that the web server in the job actually started, that the base URL passed to the runner is the one you expect, and that no basic-auth or SSO gate answers 401 to the automation.
Free plan — 10 monitors, checks every 5 min, no card required. Upgrade for 1-minute interval and multi-region monitoring.