ERR_BLOCKED_BY_CLIENT: o que significa e como corrigir
ERR_BLOCKED_BY_CLIENT significa que o próprio navegador interrompeu a requisição antes de ela sair do seu dispositivo, na maioria das vezes porque um bloqueador de anúncios ou uma extensão de privacidade casou a URL com uma regra de bloqueio. O site não recusou nada, e o servidor dele nunca recebeu a requisição.
O que significa ERR_BLOCKED_BY_CLIENT
O Chromium define esse erro como o código -20, com o comentário “The client chose to block the request.” (o cliente escolheu bloquear a requisição). O cliente é o navegador e tudo o que roda dentro dele. Chrome, Edge, Brave, Opera e outros navegadores baseados em Chromium compartilham uma única lista de erros de rede, então todos usam esse nome.
As extensões bloqueiam requisições com regras. A API declarativeNetRequest do Chrome permite que uma extensão liste regras que casam uma requisição por padrão de URL, domínio e tipo de recurso, e definam a ação como “block”. Os bloqueadores de anúncios trazem milhares de regras, em geral montadas a partir de listas de filtros públicas como EasyList e EasyPrivacy. Quando um script, imagem, frame ou chamada de API casa com uma regra, o Chrome o cancela e reporta ERR_BLOCKED_BY_CLIENT.
Uma regra enxerga apenas o endereço e o tipo da requisição. Ela não sabe o que o arquivo faz, então arquivos inofensivos com nomes azarados também são bloqueados. Isso tem duas consequências:
- A requisição nunca chega ao seu servidor. O log de acesso, o log do CDN e o log da aplicação não têm nenhuma linha sobre ela.
- Uma requisição à mesma URL a partir de outro computador, de outro perfil do navegador ou de uma ferramenta de linha de comando como o curl normalmente funciona.
Como o erro aparece
O que você vê depende do que foi bloqueado.
- Um script, imagem, folha de estilo, fonte ou frame. A página carrega, mas falta uma parte ou um botão não faz nada. O visitante não recebe nenhuma mensagem de erro. Os detalhes só aparecem nas ferramentas de desenvolvedor do navegador.
- Uma chamada fetch ou XMLHttpRequest. A chamada falha. Em JavaScript, o
fetch()é rejeitado comTypeError: Failed to fetch. A página não consegue distinguir uma requisição bloqueada de uma conexão perdida, porque os navegadores escondem o motivo dos scripts da página. - A própria página. Se o endereço que você abriu está bloqueado, o Chrome mostra uma página de erro dizendo que o endereço está bloqueado. Ela exibe o código ERR_BLOCKED_BY_CLIENT e um botão de recarregar.
No painel Console do Chrome DevTools (F12), as requisições bloqueadas ficam assim:
Failed to load resource: net::ERR_BLOCKED_BY_CLIENT
POST https://stats.example.net/collect net::ERR_BLOCKED_BY_CLIENT
Uncaught (in promise) TypeError: Failed to fetch
No painel Network, a linha fica vermelha e a coluna Status mostra “(failed)” seguido da mensagem de erro. A coluna Initiator mostra qual script ou página pediu a URL, o que diz do que ela depende.
ERR_BLOCKED_BY_CLIENT e erros parecidos
O Chromium tem vários erros de “bloqueio”. Eles diferem em quem fez o bloqueio, e isso decide onde você olha primeiro. Os números são os códigos de erro internos do Chromium.
| Erro | O que aconteceu no nível da rede ou do protocolo | Onde olhar primeiro |
|---|---|---|
| ERR_BLOCKED_BY_CLIENT (-20) | O navegador, em geral por meio de uma extensão, cancelou a requisição antes de enviá-la. | As extensões, o bloqueador embutido do navegador e depois o painel Network do DevTools. |
| ERR_BLOCKED_BY_ADMINISTRATOR (-22) | Uma lista de URLs bloqueadas definida pelo administrador do dispositivo ou do domínio interrompeu a requisição. | chrome://policy e o administrador de TI. |
| ERR_BLOCKED_BY_CSP (-30) | A Content Security Policy da própria página não permite carregar aquela URL. | A mensagem “Refused to load...” no Console e o cabeçalho Content-Security-Policy da página. |
| ERR_BLOCKED_BY_RESPONSE (-27) | A resposta chegou, mas os cabeçalhos dela (X-Frame-Options, frame-ancestors da CSP, Cross-Origin-Resource-Policy) proíbem usá-la neste contexto. | Os cabeçalhos de resposta do recurso bloqueado. |
| ERR_BLOCKED_BY_ORB (-32) | O bloqueio de leitura entre origens do Chrome (ORB, o sucessor do CORB) descartou uma resposta de outra origem que não combinava com a requisição. | O Content-Type da resposta e a forma como a página a requisitou. |
| ERR_NAME_NOT_RESOLVED (-105) | Uma consulta DNS não devolveu nenhum endereço. Um filtro de DNS no nível da rede pode bloquear um domínio assim, sem que o navegador bloqueie nada. | O servidor DNS que o dispositivo usa: roteador, resolvedor com filtragem ou VPN. |
O que causa o ERR_BLOCKED_BY_CLIENT
- Uma extensão de bloqueio de anúncios. As regras dela casam com a URL de um anúncio, de um rastreador ou de algo parecido. É a causa usual.
- Uma extensão de privacidade ou antirrastreamento. Elas bloqueiam scripts de análise, pixels de rastreamento, botões de redes sociais e alguns widgets de terceiros.
- Um bloqueador embutido. Alguns navegadores, o Brave por exemplo, bloqueiam anúncios e rastreadores sem nenhuma extensão (o Brave chama esse recurso de Shields).
- A extensão de navegador de uma suíte de segurança. Antivírus e complementos de “navegação segura” podem bloquear endereços que classificam como arriscados.
- Uma extensão de controle parental ou de filtro de conteúdo. Ela bloqueia por categoria e pode devolver o mesmo erro.
- Uma extensão instalada pelo trabalho. Uma empresa pode empurrar uma extensão para os navegadores dos funcionários, e as regras dela valem mesmo que você nunca tenha instalado nada.
- Uma ferramenta de bloqueio de scripts ou de regras personalizadas. Uma regra que você escreveu meses atrás ainda pode estar ativa.
- Uma regra esquecida no DevTools. A aba “Network request blocking” do DevTools bloqueia de propósito as URLs que casam, para testes, e os padrões ficam lá até você removê-los.
Como corrigir se você é o visitante
- Abra a página numa janela anônima. Pressione Ctrl+Shift+N (Cmd+Shift+N num Mac) no Chrome ou no Edge. As extensões ficam desativadas nessas janelas, a menos que você as tenha permitido. Se a página funciona ali, uma extensão é a causa.
- Pause o bloqueador neste site. Clique no ícone dele na barra de ferramentas e escolha a opção de pausar ou desativar neste site. Depois recarregue com Ctrl+Shift+R (Cmd+Shift+R num Mac).
- Descubra qual extensão bloqueia. Abra
chrome://extensions(edge://extensionsno Edge). Desative todas as extensões, recarregue a página, depois ative uma de cada vez e recarregue após cada uma. A que trouxer o erro de volta é a causa. Comece pelos bloqueadores de anúncios, ferramentas de privacidade e complementos de segurança. - Olhe o log do próprio bloqueador. Muitos bloqueadores mostram as URLs bloqueadas e a regra que casou. Isso permite liberar uma única regra em vez de desligar o bloqueador.
- Libere o site, mas só se você confia nele. A maioria dos bloqueadores tem uma lista de permissões para sites ou para requisições individuais.
- Confira os Shields no Brave. Clique no ícone do leão na barra de endereço e desligue os Shields para este site.
- Confira o seu software de segurança. Se o antivírus instalou uma extensão de navegador, desative essa extensão para testar.
- Num dispositivo de trabalho ou escola, um administrador pode bloquear sites por política. Isso costuma mostrar ERR_BLOCKED_BY_ADMINISTRATOR, e o
chrome://policylista as regras. Fale com a equipe de TI.
Como corrigir se você administra o site
Você não consegue fazer a extensão de um visitante liberar a sua requisição. Mas pode garantir que um bloqueio não cause dano e que os seus próprios arquivos não sejam bloqueados por engano.
Prove que o seu servidor está bem
Requisite você mesmo a URL bloqueada, fora do navegador, e procure por ela no seu log de acesso:
curl -I https://www.example.com/js/ads.js
HTTP/2 200
content-type: text/javascript
Um 200 aqui, junto com nenhuma linha de log para a requisição do visitante, mostra que o bloqueio aconteceu dentro do navegador do visitante.
Renomeie as URLs que parecem publicidade
As listas de filtros públicas casam por partes da URL. Palavras de caminho como /ads/, /banner/, /sponsor/ ou /tracking/, nomes de arquivo como ads.js ou analytics.js e hostnames conhecidos de anúncios e análise costumam casar. Se os seus arquivos, genuinamente necessários, têm esses nomes, podem ser bloqueados. Exemplos:
- Uma pasta de imagens chamada
/ads/que guarda as suas próprias promoções: use/promo/ou/images/offers/. - Um endpoint
/api/track-orderque mostra ao cliente onde está a encomenda: use/api/order-status. - Uma exportação de relatório em
/analytics/export: use/reports/export.
Nomes neutros não custam nada e evitam relatos de bug que só alguns clientes conseguem reproduzir.
Torne opcional o que é opcional
Análise, widgets de chat, espaços de anúncio e embeds são os alvos usuais. Escreva a página para que uma falha de carregamento não mude nada importante. Capture o erro em toda chamada a um serviço de terceiros:
async function sendEvent(payload) {
try {
await fetch('https://stats.example.net/collect', {
method: 'POST',
body: JSON.stringify(payload),
keepalive: true,
});
} catch (err) {
// Bloqueio, offline ou falha de CORS: a página não consegue saber qual.
// Não tente de novo em loop e não mostre um erro ao visitante.
}
}
Para um script que carrega de outro domínio, defina uma flag quando o carregamento falhar e mostre uma alternativa simples:
<script src="https://cdn.example.net/chat-widget.js" async
onerror="window.chatUnavailable = true"></script>
O código da sua página pode então checar window.chatUnavailable e mostrar um endereço de e-mail ou um formulário de contato no lugar de um espaço vazio. Nunca deixe um checkout, um cadastro ou um login depender de um script que os bloqueadores costumam remover. Se você precisa carregar um formulário de pagamento de outro domínio, mostre ao lado uma dica curta como “Se o formulário não aparecer, tente uma janela anônima”.
Teste com um bloqueador ligado
Crie um perfil limpo do navegador, instale um bloqueador de anúncios popular e uma extensão de privacidade e percorra os seus fluxos de cadastro, checkout e contato. Abra o painel Network e procure linhas vermelhas. Cada linha vermelha é uma requisição que alguns dos seus visitantes nunca completam. O Brave com as configurações padrão é um segundo teste rápido.
O log de acesso do seu servidor registra toda requisição que chega ao servidor, então os bloqueadores não o alteram. Já os scripts de análise que rodam no navegador são afetados, e por isso os números deles podem ser menores do que o log do servidor sugere.
Como aparece visto de fora
Uma verificação de monitoramento não executa extensões de navegador. Uma verificação que busca a sua página ou o arquivo bloqueado de vários lugares mede o seu servidor, não os navegadores dos visitantes, e por isso nunca produz esse erro. O padrão que aponta para um bloqueio no lado do cliente é este:
- A página e o arquivo bloqueado devolvem 200 em todos os locais, com o tipo de conteúdo correto.
- O log do servidor não tem nenhuma linha para a requisição que falhou dos visitantes afetados.
- Só alguns visitantes relatam o problema, e ele some numa janela anônima ou em outro navegador.
Se uma verificação falha em alguns ou em todos os locais, a causa está no lado do servidor e não no navegador do visitante. Nesse caso, comece pelo guia sobre verificar se um site está fora do ar para todos ou só para você.
A verificação HTTP requisita uma URL de vários locais, então você pode executá-la no arquivo exato que os usuários relatam como bloqueado. A HostTracker roda verificações a partir de mais de 300 pontos de verificação em 158 cidades e pode enviar um alerta por e-mail, SMS, chamada de voz, Slack, Telegram e mais se esse arquivo começar a falhar no servidor.
Perguntas frequentes
O ERR_BLOCKED_BY_CLIENT é um vírus ou uma invasão?
Não. É uma mensagem normal do seu próprio navegador. Em geral quer dizer que uma ferramenta que você instalou de propósito, como um bloqueador de anúncios, fez o trabalho dela. Se você não lembra de ter instalado a extensão, revise a lista em chrome://extensions.
Isso quer dizer que o site está fora do ar?
Não. A requisição nunca saiu do seu navegador, então o estado do servidor não importou para ela. Se a página inteira não abre, o erro é outro, e a tabela acima mostra como distinguir. Você pode checar o site de outros lugares com um verificador de site fora do ar.
Por que vejo isso no console, mas a página funciona?
Porque o arquivo bloqueado era opcional, por exemplo um script de análise ou um anúncio. A página continua funcionando sem ele, e o Console registra toda requisição bloqueada de qualquer jeito. Algumas linhas vermelhas numa página cheia de anúncios são normais num computador com bloqueador.
Por que acontece só no meu computador?
As extensões, as regras delas e as listas de permissões pertencem a um único perfil do navegador. Outro computador ou outro perfil pode ter extensões diferentes. É também por isso que o problema é difícil de reproduzir para o dono do site.
Posso corrigir isso do lado do site?
Em parte. Você pode renomear URLs que parecem anúncios ou rastreadores, tornar opcionais os scripts de terceiros e adicionar uma alternativa para os recursos essenciais. Você não consegue forçar uma extensão a liberar uma requisição, e não deve tentar esconder rastreadores ou anúncios dos bloqueadores.
Acontece no Firefox e no Safari?
O nome ERR_BLOCKED_BY_CLIENT pertence aos navegadores Chromium: Chrome, Edge, Brave, Opera e semelhantes. O Firefox e o Safari têm os próprios bloqueadores de conteúdo e redigem as mensagens de outro jeito. A causa é a mesma: o navegador ou um complemento cancelou a requisição.
Por que o fetch só diz “Failed to fetch”?
Por razões de privacidade, os navegadores não dão aos scripts da página nenhum detalhe sobre falhas de rede. Um script vê o mesmo erro para uma requisição bloqueada, uma conexão perdida e um problema de CORS. O Console do DevTools mostra o motivo real para quem está usando o navegador, mas a página não consegue lê-lo.
Fontes e leitura adicional
- Chromium net error list: as definições de BLOCKED_BY_CLIENT (-20) e dos outros erros de “bloqueio” da tabela acima.
- chrome.declarativeNetRequest API: como as extensões bloqueiam requisições de rede com regras.
- Chrome DevTools: Network features reference: as colunas Status e Initiator e o bloqueio de requisições.
- EasyList: as listas de filtros públicas a partir das quais muitos bloqueadores montam suas regras.