Browser ERR_BLOCKED_BY_CLIENT — Request Blocked
Diagnose ERR_BLOCKED_BY_CLIENT when ad blockers or extensions block a request, and distinguish extension blocking from CSP and CORS failures.
Symptoms
- net::ERR_BLOCKED_BY_CLIENT in the Network tab
- An analytics or tracking request never reaches the server
- The failure disappears in Incognito or another browser
Possible causes
- An ad blocker or privacy extension matched the URL pattern
- A corporate extension or proxy blocks the domain
- The request URL contains an ad-like pattern in the path
- Browser Tracking Protection blocked a cross-site request
Diagnosis steps
Reproduce in Incognito with extensions disabled
Interpretation
If it succeeds there, an extension is the cause; the request never left the browser.
Inspect the blocked request in the Network tab
Interpretation
The status column shows (blocked:other) or ERR_BLOCKED_BY_CLIENT, not an HTTP status.
Compare against CSP and CORS errors
Interpretation
CSP reports a violation with a directive; CORS shows a preflight error — ERR_BLOCKED_BY_CLIENT is client-side filtering.
Root cause
ERR_BLOCKED_BY_CLIENT is generated locally by the browser when an extension, ad blocker, or tracking-protection feature matches the request URL and cancels it before it is sent. Unlike CSP or CORS, no network request occurs, so server logs show nothing.
Fix
Recognise that end users may legitimately block such requests: design features to degrade gracefully and never depend on tracking endpoints for core function. Rename paths that trip heuristics, self-host essential assets, and load non-essential scripts only when permitted. For debugging, test in a clean profile and confirm the request appears in server access logs when allowed.
Verify the fix
Load the page in a clean profile with the extension disabled; the request appears in the Network tab with a real status code and in server logs, confirming it was client-side blocking rather than a server fault.
Symptoms
The Network tab shows a request cancelled with net::ERR_BLOCKED_BY_CLIENT and no response. It vanishes in Incognito or a clean profile, which is the strongest hint.
Diagnosis
Compare environments and error types:
Network tab columns: Status = (blocked:other)
Incognito (extensions off): request returns 200
CSP would log a “Refused to load” message; CORS would show a preflight failure. A local block shows none.
Fix
Make blocked requests non-essential:
<script src="/assets/app.js" defer></script>
<!-- load analytics only if allowed, never block core UI -->
Avoid ad-like URL patterns for first-party assets.
Verification
Reload in a clean profile; the request now returns a real status and appears in server logs, proving the earlier block was client-side and the app works when the request is permitted.