Código de Status 302 (HTTP 302 Found): O Que Significa e Quando Usar

Advertisement
O Que É o Código de Status 302?
O código de status 302 — oficialmente chamado de 302 Found — é um código de resposta HTTP que informa ao cliente (geralmente um navegador) que o recurso solicitado foi movido temporariamente para outra URL. A nova URL é fornecida no cabeçalho Location da resposta, e o cliente deve buscar o recurso a partir dali apenas para esta requisição.
Como a mudança é temporária, o cliente deve continuar a usar a URL original em requisições futuras. Mecanismos de busca, navegadores e favoritos não devem substituir a URL original pelo destino do redirecionamento. Esta é a principal diferença comportamental entre o HTTP 302 e o 301 Moved Permanently.
O código 302 faz parte da classe 3xx de redirecionamento dos códigos de status HTTP, definida na RFC 9110. Apesar do nome histórico 'Found', o corpo da resposta quase nunca é usado — navegadores modernos seguem imediatamente o cabeçalho Location sem renderizá-lo.
Anatomia de uma Resposta 302
Uma resposta com código de status 302 sempre contém dois elementos essenciais: a linha de status e um cabeçalho Location apontando para a nova URL. Sem um cabeçalho Location válido, o cliente não consegue seguir o redirecionamento.
Linha de status —
HTTP/1.1 302 Found(ouHTTP/2 302em HTTP/2)Cabeçalho Location — a URL de destino que o cliente deve seguir (obrigatório)
Cache-Control — geralmente
no-cachepara que os navegadores não armazenem o destino do redirecionamento permanentementeCorpo — normalmente vazio, embora servidores possam incluir uma pequena página HTML para clientes legados (
<html><body><a href="...">Clique aqui</a></body></html>)
HTTP/1.1 302 Found
Location: https://www.example.com/new-page
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Cache-Control: no-cache, no-store
Date: Mon, 27 Apr 2026 14:00:00 GMTO cabeçalho Location pode ser uma URL absoluta (https://example.com/path) ou relativa ao caminho (/path). Clientes HTTP modernos aceitam ambas, embora URLs absolutas sejam recomendadas por clareza.
302 vs 301 vs 307 vs 308: Qual Redirecionamento Usar?
O HTTP define cinco códigos comuns de redirecionamento, e escolher o correto importa para cache, SEO e preservação do método de requisição. Use esta tabela como guia de decisão:
| Código | Permanência | Método Preservado? | Cacheado pelo Navegador? | Melhor Para |
|---|---|---|---|---|
| 301 Moved Permanently | Permanente | Pode mudar POST→GET | Sim (agressivamente) | Mudanças permanentes de URL, migração de domínio |
| 302 Found | Temporário | Frequentemente muda POST→GET | Não | Fluxos de login, testes A/B, manutenção |
| 303 See Other | Temporário | Sempre muda para GET | Não | Padrão POST/Redirect/GET após envio de formulário |
| 307 Temporary Redirect | Temporário | Sim — preservado | Não | Redirecionamentos temporários que devem manter POST/PUT |
| 308 Permanent Redirect | Permanente | Sim — preservado | Sim | Redirecionamentos permanentes que devem manter POST/PUT |
A recomendação moderna: se você precisa de um redirecionamento temporário e quer ser inequívoco quanto ao tratamento do método, use 307 em vez de 302. O código 307 foi adicionado no HTTP/1.1 justamente porque navegadores historicamente violavam a especificação ao trocar POST por GET em um 302 — e esse comportamento incorreto se tornou o padrão de fato.
Quando Usar um Redirecionamento 302?
Use o código de status 302 sempre que o redirecionamento for genuinamente temporário — ou seja, quando você espera remover ou alterar o destino no futuro. Casos de uso legítimos comuns incluem:
Redirecionamentos de login — Enviar um usuário não autenticado de
/dashboardpara/logine de volta após o loginTestes A/B — Direcionar 50% dos usuários para uma variante sem alterar a URL canônica
Páginas de manutenção — Redirecionar todo o tráfego para
/maintenanceenquanto você corrige o servidorRoteamento por geolocalização — Enviar visitantes de
/para/brou/uscom base no país, mantendo/como entrada canônicaRedirecionamentos para mobile — Levar usuários de smartphone de
example.comparam.example.com(embora design responsivo seja preferível hoje)Páginas de produtos sem estoque — Levar compradores para a categoria até o produto voltar
URLs promocionais de curta duração —
/black-fridayredirecionando para a campanha apenas durante a promoção
Se algum desses casos se tornar permanente, mude para 301. Mecanismos de busca esperam vários meses antes de tratar um 302 antigo como 301, então deixar uma mudança permanente em 302 custa sinais de ranking durante esse período.
Advertisement
Como Enviar um Código de Status 302
A maioria dos servidores e frameworks tem helpers para enviar um redirecionamento 302. Abaixo estão os padrões mais comuns. Cada um envia HTTP 302 Found com um cabeçalho Location — as duas únicas coisas que uma resposta 302 estritamente precisa.
Nginx
No Nginx, use a diretiva return com o código 302 (o padrão se você omitir o código também é 302):
server {
listen 80;
server_name example.com;
# Redirecionamento temporário (302 Found)
location /old-page {
return 302 https://example.com/new-page;
}
}Apache (.htaccess)
No Apache, use Redirect com o código 302 ou RewriteRule com a flag [R=302,L]:
# Redirecionamento temporário simples
Redirect 302 /old-page https://example.com/new-page
# Ou com mod_rewrite para correspondência por padrão
RewriteEngine On
RewriteRule ^maintenance$ /maintenance.html [R=302,L]Node.js (Express)
O método res.redirect() do Express usa 302 por padrão quando nenhum código é informado:
// Redirecionamento temporário (302 Found por padrão)
app.get('/dashboard', (req, res) => {
if (!req.user) {
return res.redirect('/login') // envia 302
}
// ...renderiza dashboard
})
// Ou seja explícito:
res.redirect(302, '/login')Como Testar um Código de Status 302
Após implementar um redirecionamento 302, verifique se ele funciona corretamente. A forma mais rápida é o curl no terminal — ele mostra o código de status exato e o cabeçalho Location sem interferência de cache do navegador.
# Mostrar apenas os cabeçalhos da resposta (-I) sem seguir o redirecionamento
curl -I https://example.com/old-page
# Saída esperada:
# HTTP/2 302
# location: https://example.com/new-page
# cache-control: no-cache
# date: Mon, 27 Apr 2026 14:00:00 GMT
# Seguir toda a cadeia (-L) e mostrar cada salto
curl -ILs https://example.com/old-page | grep -i 'HTTP/\|location:'Se você não tem acesso ao terminal, use o Verificador de Redirecionamento gratuito do DNS Robot para rastrear toda a cadeia a partir de um servidor neutro, ou o Verificador de HTTP Headers para inspecionar os cabeçalhos brutos — ambos ignoram o cache do seu navegador.
Redirecionamentos 302 e SEO
Um código de status 302 diz aos mecanismos de busca: 'esta mudança é temporária, mantenha a URL original no índice.' Isso tem consequências diretas para os sinais de ranking.
Segundo o Google Search Central, um 302 não transfere os sinais de ranking da URL original para o destino do redirecionamento da forma como um 301 faz. A URL original permanece canônica. O Google ainda pode indexar a página de destino se outros sinais de canonicalização (links internos, sitemap, hreflang) apontarem para ela — mas o próprio 302 não é um sinal canônico.
Use 301 para mudanças permanentes — Trocas de domínio, mudanças na estrutura de URL, consolidação de páginas
Use 302 para mudanças temporárias — Login, testes A/B, manutenção, roteamento regional
Não deixe uma mudança permanente em 302 — O Google leva meses para tratar um 302 antigo como 301, custando equity de ranking
Evite cadeias —
A → 302 → B → 302 → Cdilui sinais e atrasa o carregamento. Cada salto adiciona latência
Por Que um 302 Transforma POST em GET
Este é o comportamento mais surpreendente do HTTP 302. A RFC original dizia que clientes deveriam preservar o método ao seguir um redirecionamento. Mas os primeiros navegadores — Mosaic, Netscape, IE — todos mudaram POST para GET em um 302, e esse comportamento incorreto se tornou tão difundido que foi padronizado no WHATWG Fetch Standard.
Hoje, quando um navegador envia um POST /login e o servidor responde com 302 Found, o navegador automaticamente emite um GET /next-page no destino. Os dados do formulário são descartados. Isso raramente é o que o desenvolvedor pretendia.
# O que você envia:
POST /submit-form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
name=Alice&email=alice@example.com
# Servidor responde com 302:
HTTP/1.1 302 Found
Location: /thank-you
# Navegador segue com GET (dados do formulário descartados!):
GET /thank-you HTTP/1.1
Host: example.comSe o redirecionamento precisa preservar o método original (POST continua POST, PUT continua PUT), use 307 Temporary Redirect em vez de 302. Se quiser intencionalmente descartar o corpo e mudar para GET — o clássico padrão POST/Redirect/GET — use 303 See Other. Ambos são inequívocos; o 302 não é.
Advertisement
Erros Comuns de 302 e Como Corrigir
Quando o HTTP 302 dá errado, geralmente aparece como um destes sintomas. A maioria tem soluções simples:
`Recebendo 302 em vez de 200` — O servidor está redirecionando quando não deveria. Verifique
.htaccess, configuração do Nginx ou middleware do framework`302 sem cabeçalho Location` — Resposta inválida. Os navegadores mostrarão página em branco. Garanta que o código define o cabeçalho
Locationantes de enviar o status`302 redirecionando para si mesmo` — Loop de redirecionamento. A URL
Locationé igual à URL da requisição. Verifique a regra por condições ausentes`302 descartando dados de formulário` — POST → 302 → GET descarta o corpo. Mude para
307 Temporary Redirectpara preservar o POST`302 cacheado pelo navegador` — Servidor com bug definiu
Cache-Control: max-age=...no redirecionamento. AdicioneCache-Control: no-cachee limpe o cache do navegador`302 em produção mas não local` — Geralmente um CDN ou load balancer adicionando redirecionamentos. Teste direto no origin para isolar
Loops de Redirecionamento 302: Como Diagnosticar
Um loop de redirecionamento ocorre quando a URL A retorna 302 para a URL B, e a URL B retorna 302 de volta para A. Após 20 saltos (no Chrome e Firefox), o navegador mostra ERR_TOO_MANY_REDIRECTS e desiste.
A causa mais comum é um conflito SSL/HTTPS entre um CDN (como Cloudflare) e o servidor de origem: o CDN se conecta ao origin via HTTP, o origin redireciona HTTP→HTTPS, o CDN remove o HTTPS e se conecta via HTTP de novo — loop infinito.
# Rastrear toda a cadeia (limite de 10 saltos para evitar loops infinitos)
curl -ILs --max-redirs 10 https://example.com 2>&1 | grep -i 'HTTP/\|location:'
# Exemplo de loop:
# HTTP/2 302
# location: http://example.com/
# HTTP/1.1 302 Found
# Location: https://example.com/
# HTTP/2 302
# location: http://example.com/ <-- loop confirmadoSe você vê duas URLs alternando nos cabeçalhos Location, confirmou um loop de 302. Para um guia completo, veja nosso post ERR_TOO_MANY_REDIRECTS. O Verificador de Redirecionamento do DNS Robot rastreia toda a cadeia a partir de uma localização neutra e para no ponto do loop.
Boas Práticas para o Código de Status 302
Enviar 302 Found corretamente evita a maioria dos bugs que desenvolvedores enfrentam ao implementar redirecionamentos:
Sempre inclua um cabeçalho Location — Um
302semLocationé inválido e renderiza como página em brancoSempre defina Cache-Control: no-cache — Caso contrário, alguns navegadores cacheiam o redirecionamento durante a sessão, quebrando o contrato 'temporário'
Use URLs absolutas em Location —
https://example.com/newé inequívoco;/newfunciona, mas pode quebrar atrás de proxies que mudam o hostMantenha redirecionamentos em um único salto —
A → 302 → Bestá bem;A → 302 → B → 302 → Catrasa o carregamento e dilui rankingNão redirecione de POST para outra página com 302 — Use
303(GET intencional) ou307(preserva POST)Audite redirecionamentos mensalmente — Redirecionamentos temporários antigos costumam sobreviver ao motivo. Verifique com Redirect Checker
Mude para 301 quando a mudança virar permanente — Não deixe uma mudança permanente em
302por mais de algumas semanas
Comportamento de Navegadores e Cache
Diferentes navegadores e intermediários tratam o HTTP 302 de forma um pouco diferente. Conhecer as peculiaridades poupa tempo de debug:
| Cliente | Comportamento Padrão no 302 | Cache Padrão |
|---|---|---|
| Chrome / Edge | Segue automaticamente, muda POST→GET | Não cacheia, exceto se cabeçalhos disserem |
| Firefox | Segue automaticamente, muda POST→GET | Não cacheia, exceto se cabeçalhos disserem |
| Safari | Segue automaticamente, muda POST→GET | Cache de redirecionamentos um pouco mais agressivo |
| curl (padrão) | NÃO segue — mostra 302 + Location | Sem cache |
| curl -L | Segue até --max-redirs (padrão 50) | Sem cache |
| wget (padrão) | Segue até --max-redirect=20 | Sem cache |
| Googlebot | Segue, trata como sinal temporário | Recrawl da URL original |
Para verificar comportamentos extremos (métodos POST, loops infinitos, presença de cabeçalhos), o Verificador de HTTP Headers do DNS Robot mostra a resposta bruta sem reescrita do método pelo navegador. Leia mais sobre redirecionamentos temporários na documentação MDN e na especificação RFC 9110.
Advertisement
Rastreie qualquer cadeia de redirecionamento em segundos
Use o Verificador de Redirecionamento gratuito do DNS Robot para inspecionar cada salto de uma cadeia — veja códigos de status, cabeçalhos Location e o destino final a partir de um servidor neutro (sem cache de navegador).
Testar Verificador de RedirecionamentoAdvertisement
Perguntas Frequentes
O código de status 302 (HTTP 302 Found) significa que o recurso solicitado está temporariamente em outra URL informada no cabeçalho Location da resposta. O cliente deve seguir o redirecionamento para esta requisição, mas continuar usando a URL original em requisições futuras. É a contraparte temporária do 301 Moved Permanently.