# Timeout em requisições HTTP: como implementar corretamente

> Timeout em requisições HTTP é uma técnica essencial para evitar travamentos em aplicações. A implementação correta envolve definir um limite de tempo máximo para cada requisição, usando bibliotecas como axios ou fetch com AbortController. Timeouts mal configurados causam erros de latência e sobrecarga no servidor. A prática recomendada inclui valores entre 5 e 30 segundos, dependendo do contexto. Timeout em requisições HTTP deve ser testado em cenários de rede lenta para garantir robustez.

*Blog Sem Juízo · Destaques · 07 de agosto de 2026 · Babi Cordeiro*

Timeout em requisições HTTP evita que seu app fique travado esperando resposta. Veja como implementar corretamente, com exemplos práticos e erros comuns a evitar.

Timeout em requisições HTTP é aquele limite de tempo que impede seu aplicativo de ficar esperando para sempre por uma resposta. Sem ele, um servidor lento ou fora do ar pode travar a interface do usuário, gerar filas de requisições e derrubar o serviço inteiro. Neste guia, você vai aprender a implementar timeout corretamente, tanto no cliente quanto no servidor, com exemplos práticos e erros comuns a evitar.

## Passo 1: Defina o timeout no cliente com Axios ou Fetch

No lado do cliente, a forma mais simples é usar o Axios, que aceita um parâmetro timeout em milissegundos. Por exemplo, axios.get('/api/dados', { timeout: 5000 }) define 5 segundos de espera. Se a resposta não chegar, a requisição é cancelada e um erro é lançado.

Com o Fetch API nativo, o processo é um pouco mais manual: você precisa usar o AbortController. Crie um controller, passe o sinal para o fetch e use setTimeout para abortar após o tempo desejado. Veja um exemplo:

const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 5000);

try { const response = await fetch('/api/dados', { signal: controller.signal }); clearTimeout(timeoutId); } catch (error) { if (error.name === 'AbortError') { console.log('Requisição cancelada por timeout'); } }

Erro comum: esquecer de limpar o setTimeout após a resposta. Isso pode causar memory leaks e aborts indesejados em requisições seguintes.

## Passo 2: Configure o timeout no servidor

No servidor, o timeout protege seus recursos de requisições que demoram demais. Em Node.js com Express, você pode usar o middleware timeout ou definir um limite no próprio http.createServer. Por exemplo, server.timeout = 10000 define 10 segundos para toda requisição.

Em outros servidores, como nginx, a diretiva proxy_read_timeout define quanto tempo esperar pela resposta do backend. O valor padrão é 60 segundos, mas para APIs, 10 a 30 segundos costuma ser suficiente. Se o backend não responder nesse período, o nginx retorna erro 504.

Erro comum: definir timeout apenas no servidor e esquecer do cliente. Quando o servidor derruba a conexão, o cliente pode ficar esperando até o próprio timeout, o que dobra o tempo de espera.

## Passo 3: Escolha valores adequados e trate erros

Não existe um valor mágico de timeout. Ele depende do que sua aplicação faz. Uma API de consulta a CEP, por exemplo, pode responder em menos de 1 segundo, então 5 segundos é generoso. Já um endpoint que processa relatórios pesados pode precisar de 30 segundos ou mais. O importante é medir o tempo real de resposta em produção e ajustar.

Ao tratar o erro de timeout, retorne uma mensagem clara ao usuário, como "Serviço indisponível, tente novamente". Não é só logar o erro no console. Em APIs, use o código HTTP 504 (Gateway Timeout) ou 408 (Request Timeout), dependendo de quem detectou o problema.

Erro comum: usar o mesmo timeout para todas as requisições. Uma operação de upload de arquivo grande não pode ter o mesmo limite de uma consulta simples. Separe os endpoints por criticidade.

## Checklist final

- Cliente define timeout com Axios ou AbortController no Fetch
- Servidor define timeout no Express, nginx ou equivalente
- Valores de timeout baseados em medição real, não chute
- Erros de timeout tratados com mensagem amigável ao usuário
- Timeouts diferentes para operações diferentes

## FAQ

### O que é timeout em requisições HTTP?

É o tempo máximo que o cliente ou servidor espera por uma resposta antes de cancelar a operação. Sem ele, uma requisição pode ficar pendente indefinidamente, consumindo recursos e travando a aplicação.

### Qual a diferença entre timeout no cliente e no servidor?

No cliente, o timeout evita que o usuário fique esperando. No servidor, protege os recursos do servidor de requisições lentas. Ambos são importantes e devem ser configurados em conjunto, com valores compatíveis.

### O que acontece quando o timeout é atingido?

A requisição é cancelada e um erro é lançado. No cliente, você pode capturar esse erro e exibir uma mensagem. No servidor, a conexão é encerrada e um status HTTP como 408 ou 504 é retornado.

### Como escolher o valor ideal de timeout?

Meça o tempo de resposta da sua API em condições normais e sob carga. Defina um timeout que seja pelo menos o dobro do tempo médio, mas não tão alto que esconda problemas reais. Para APIs públicas, 5 a 10 segundos é um bom ponto de partida.

### Timeout é a mesma coisa que retry?

Não. Timeout é o limite de espera. Retry é tentar novamente após uma falha. Eles podem ser usados juntos, mas retry sem timeout pode causar loops infinitos. Sempre combine os dois com cautela.

### Fetch API tem timeout nativo?

Não. O Fetch não tem um parâmetro de timeout como o Axios. Você precisa usar o AbortController e um setTimeout manual, como mostrado no Passo 1. Isso adiciona um pouco de complexidade, mas é simples de implementar.

---

Fonte (canonical): https://blogsemjuizo.com.br/destaques/timeout-em-requisicoes-http-como-implementar-corretamente/
