O erro ERR_CONTENT_DECODING_FAILED (às vezes exibido como Erro 330 em versões mais antigas do Chrome) aparece quando o Google Chrome não consegue decodificar o conteúdo recebido de um servidor web. Isso geralmente significa que os cabeçalhos de resposta HTTP do servidor indicam que o conteúdo está comprimido (geralmente com gzip), mas o corpo real da resposta não está comprimido, está comprimido de forma diferente ou está corrompido. Este artigo explica as causas raiz, como diagnosticar o problema e como corrigi-lo em diferentes plataformas de servidor web.

Entendendo o erro

Quando um navegador envia uma solicitação a um servidor web, ele inclui um cabeçalho Accept-Encoding indicando quais métodos de compressão ele suporta:

Accept-Encoding: gzip, deflate, br

Se o servidor decide comprimir a resposta, ele inclui um cabeçalho Content-Encoding na resposta:

Content-Encoding: gzip

O navegador então espera descomprimir o corpo da resposta usando o algoritmo especificado. ERR_CONTENT_DECODING_FAILED ocorre quando há uma incompatibilidade — o cabeçalho diz gzip mas o corpo não é dados gzip válidos.

Causas comuns

Dupla compressão (a mais comum)

Esta é a causa mais frequente, especialmente com plataformas CMS como WordPress. Acontece quando:

  1. Um plugin de cache ou otimização do WordPress habilita compressão gzip no nível da aplicação
  2. O servidor web (IIS, Nginx, Apache) também está configurado para comprimir respostas
  3. O servidor comprime o conteúdo já comprimido, produzindo dados gzip inválidos
  4. O Chrome recebe os dados duplamente comprimidos e não consegue decodificá-los

Interferência de proxy ou CDN

Um proxy reverso ou CDN entre o cliente e o servidor de origem pode:

  • Remover o conteúdo comprimido mas deixar o cabeçalho Content-Encoding: gzip intacto
  • Recomprimir uma resposta já comprimida
  • Armazenar em cache uma resposta comprimida e servi-la com cabeçalhos incorretos

Resposta corrompida

Problemas de rede, respostas truncadas ou erros do lado do servidor podem produzir uma resposta onde o cabeçalho Content-Encoding está definido mas o corpo está incompleto ou corrompido.

Software antivírus ou de segurança

Software antivírus de desktop que inspeciona o tráfego HTTPS pode às vezes modificar os corpos das respostas sem atualizar os cabeçalhos de codificação de conteúdo, fazendo com que o navegador falhe na decodificação.

Diagnosticando o problema

Usando as Ferramentas de Desenvolvedor do Chrome

  1. Pressione F12 para abrir as Ferramentas de Desenvolvedor do Chrome
  2. Vá para a aba Rede
  3. Recarregue a página que produz o erro
  4. Clique na solicitação que falhou
  5. Examine os Cabeçalhos de Resposta:
    • Procure por Content-Encoding: gzip
    • Verifique Transfer-Encoding
  6. Clique na aba Resposta — se a resposta estiver ilegível ou vazia, a codificação está errada

Usando curl pela linha de comando

# Request with gzip encoding and see response headers
curl -H "Accept-Encoding: gzip" -I https://example.com

# Download the response and check if it is valid gzip
curl -H "Accept-Encoding: gzip" -o response.gz https://example.com
file response.gz    # Should report "gzip compressed data"
gunzip response.gz  # Should decompress without errors

# Request without compression to see if the page works
curl --compressed -v https://example.com

Verificando com um navegador diferente

Se a página carrega no Firefox ou Edge mas não no Chrome, o problema pode estar relacionado ao cache do Chrome ou a uma extensão específica do Chrome. Se falha em todos os navegadores, o problema é do lado do servidor.

Corrigindo o problema no IIS

Desativar a dupla compressão

Se um plugin do WordPress ou a aplicação PHP gerencia a compressão, desative a compressão dinâmica do IIS:

Usando o Gerenciador do IIS:

  1. Abra o Gerenciador do IIS
  2. Selecione o site ou o nó do servidor
  3. Clique duas vezes em Compressão
  4. Desmarque Habilitar compressão de conteúdo dinâmico
  5. Clique em Aplicar

Usando web.config:

<configuration>
  <system.webServer>
    <urlCompression doStaticCompression="true"
                    doDynamicCompression="false" />
  </system.webServer>
</configuration>

Ou deixe o IIS gerenciar toda a compressão

Alternativamente, desative a compressão na aplicação e deixe o IIS gerenciá-la:

  1. Desative o gzip nos plugins do WordPress (W3 Total Cache, WP Super Cache, etc.)
  2. Habilite tanto a compressão estática quanto dinâmica no IIS:
<configuration>
  <system.webServer>
    <urlCompression doStaticCompression="true"
                    doDynamicCompression="true" />
    <httpCompression>
      <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="*/*" enabled="false" />
      </dynamicTypes>
      <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="*/*" enabled="false" />
      </staticTypes>
    </httpCompression>
  </system.webServer>
</configuration>

Corrigindo o problema no Nginx

Verificar a configuração do gzip

Verifique sua configuração do Nginx para configurações corretas de gzip:

http {
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_min_length 1000;

    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/json
        application/javascript
        application/xml
        application/xml+rss
        application/x-javascript
        image/svg+xml;
}

Evitar comprimir conteúdo já comprimido

Se sua aplicação (PHP, Node.js) envia respostas pré-comprimidas, diga ao Nginx para não comprimi-las novamente:

location ~ \.php$ {
    # Pass through without additional compression
    gzip off;
    proxy_pass http://backend;
}

Ou use gzip_proxied para controlar quando o Nginx comprime respostas do proxy:

# Only compress if the backend did not already compress
gzip_proxied no-cache no-store private expired auth;

Corrigindo o problema no Apache

Verificar configuração conflitante do mod_deflate

# In .htaccess or httpd.conf
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/css text/javascript
    AddOutputFilterByType DEFLATE application/json application/javascript
    AddOutputFilterByType DEFLATE application/xml application/xhtml+xml

    # Do not compress images or already-compressed files
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|gz|zip|bz2)$ no-gzip
</IfModule>

Se um plugin PHP também está comprimindo a saída, desative o mod_deflate ou desative a compressão do plugin.

Soluções específicas para WordPress

Como este erro ocorre frequentemente com instalações WordPress, aqui estão soluções direcionadas:

W3 Total Cache

  1. Vá para Desempenho > Cache do Navegador
  2. Em Compressão HTTP, desmarque Habilitar compressão HTTP (gzip)
  3. Salve as configurações
  4. Deixe o servidor web gerenciar a compressão em vez disso

WP Super Cache

  1. Vá para Configurações > WP Super Cache > Avançado
  2. Desmarque Comprimir páginas para que sejam servidas mais rapidamente aos visitantes
  3. Salve as configurações

Ajuste no wp-config.php

Você pode adicionar isso ao wp-config.php para evitar que o WordPress envie saída comprimida:

// Disable WordPress gzip output
@ini_set('zlib.output_compression', 'Off');

Solução de problemas do lado do cliente

Se você está experimentando este erro como usuário (não como administrador do servidor):

Limpar o cache do navegador

  1. Pressione Ctrl+Shift+Delete no Chrome
  2. Selecione Imagens e arquivos em cache
  3. Defina o intervalo de tempo para Todo o período
  4. Clique em Limpar dados

Desativar extensões do navegador

Algumas extensões (bloqueadores de anúncios, ferramentas de privacidade) podem interferir no tratamento de respostas:

  1. Abra chrome://extensions/
  2. Desative todas as extensões
  3. Recarregue a página que falha
  4. Se funcionar, reative as extensões uma por uma para encontrar a culpada

Verificar a verificação HTTPS do antivírus

Se seu antivírus verifica o tráfego HTTPS, tente desativar temporariamente essa funcionalidade para ver se resolve o erro.

Limpar o cache DNS

ipconfig /flushdns

No macOS:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

Resumo

O erro ERR_CONTENT_DECODING_FAILED no Chrome é causado por uma incompatibilidade entre o cabeçalho Content-Encoding e o corpo real da resposta. A causa mais comum é a dupla compressão, onde tanto um plugin do CMS quanto o servidor web tentam comprimir a resposta com gzip. A correção é simples: garanta que apenas uma camada gerencie a compressão. Use as Ferramentas de Desenvolvedor do Chrome e curl para diagnosticar qual camada está causando o conflito, depois ajuste a configuração do IIS, Nginx ou Apache conforme apropriado. Para WordPress especificamente, desative a compressão nos plugins de cache e deixe o servidor web gerenciá-la.