ERR_CONTENT_DECODING_FAILED Browser Origin: On your device Last updated 15 Oct 2026

Chrome: This page isn’t working — sent an invalid response. ERR_CONTENT_DECODING_FAILED

The response claims to be compressed (gzip/brotli) but cannot be decompressed — it was double-compressed, truncated or not compressed at all.

Exact message you may see sent an invalid response
Seen on: Chrome Edge PHP Nginx Apache

Meaning

The Content-Encoding header and the real body must match. Double compression (the app gzips and the server gzips again), a proxy that decompresses but leaves the header, or PHP zlib.output_compression combined with ob_gzhandler all trigger it.

Common causes

  • Body compressed twice (application + web server or CDN)
  • Content-Encoding: gzip header on an uncompressed body
  • Truncated compressed stream (crash, proxy limit)
  • Mixed zlib.output_compression and manual gzip in PHP
  • Corrupted cache storing the wrong encoding

⚡ Quick fix

  1. Compress in exactly one layer
  2. Check curl -sI --compressed and curl -s -H "Accept-Encoding: gzip" | file -
  3. Purge CDN/cache after fixing

Detailed fix by platform

PHP

  1. Use either zlib.output_compression=On or ob_gzhandler, not both
  2. Ensure no output before header() calls

Nginx

  1. gzip on; should not be used together with an upstream that already sends Content-Encoding: gzip unless gzip_proxied/proxy_set_header Accept-Encoding "" is set deliberately

Apache

  1. Disable duplicate mod_deflate rules; check .htaccess AddOutputFilterByType

How to diagnose

  1. Layers — How many places compress?
  2. Test — Does the body decompress with gunzip?
  3. Cache — Is a stale encoding cached?

🔧 Still not fixed?

Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:

Where this error sits

Origin: On your device. Errors that are often confused with or caused by this one (click to open):

406 — HTTP 406 Not Acceptable (HTTP)406Aw, Snap! — Chrome: Aw, Snap! Something went wrong while displaying this webpage. Error code: STATUS_ACCESS_VIOLATION / SIGILL / Out of Memory (Browser)Aw, Snap!ERR_EMPTY_RESPONSE — Chrome: This page isn’t working — example.com didn’t send any data. ERR_EMPTY_RESPONSE (Browser)ERR_EMPTY_RESPONSEERR_HTTP2_PROTOCOL_ERROR — Chrome: This page isn’t working — example.com is unable to handle this request. ERR_HTTP2_PROTOCOL_ERROR (Browser)ERR_HTTP2_PROTOCOL_ER…ERR_TOO_MANY_REDIRECTS — Chrome: This page isn’t working — example.com redirected you too many times. ERR_TOO_MANY_REDIRECTS (Browser)ERR_TOO_MANY_REDIRECTSnet::ERR_CONTENT_LENGTH_MISMATCH — Chrome DevTools: net::ERR_CONTENT_LENGTH_MISMATCH — body shorter than the Content-Length header (Browser)net::ERR_CONTENT_LENG…net::ERR_INCOMPLETE_CHUNKED_ENCODING — Chrome DevTools: net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) — response cut off midway (Browser)net::ERR_INCOMPLETE_C…ERR_CONTE…

Explore the map of this error Full error map →

🧠 Still stuck? Analyze your error

Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.

💬 What worked for others

No tips yet — did something else fix this for you?

Share what worked for you

Tips are checked by an editor before they appear. Links are removed.