Back

CORS Descomplicado: O Guia Definitivo para Resolver Erros de Cross-Origin

Fala, Dev! 👋
Se você desenvolve para a web, com certeza já passou por aquele momento de frustração ao ver o console do navegador explodir em vermelho:

Access to fetch at 'https://api.exemplo.com/dados' from origin 'https://meu-app.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

É o famoso erro de CORS. Muita gente acha que é um bug, ou que o navegador está de "birra" com a gente. Mas na verdade, o CORS é um herói incompreendido! Ele está lá para proteger a segurança dos seus usuários.

Hoje vamos desmistificar o CORS, entender como ele funciona por baixo dos panos e, claro, aprender a resolver esses erros chatos de uma vez por todas. Bora lá? 🚀

O que é esse tal de CORS?

CORS significa Cross-Origin Resource Sharing (Compartilhamento de Recursos de Origem Cruzada).
Basicamente, é um sistema que usa cabeçalhos HTTP para dizer ao navegador: "Ei, pode deixar esse site acessar meus recursos, tá tranquilo!".

Para entender o CORS, precisamos falar da Same-Origin Policy (SOP).
Por padrão, os navegadores bloqueiam requisições feitas via script (como o fetch ou axios) para um domínio diferente do site que você está visitando.
Isso evita que um site malicioso (site-do-mal.com) faça requisições para o seu banco (meu-banco.com) usando os seus cookies de sessão.

Mas no mundo real, a gente vive separando o Front-end (localhost:3000) do Back-end (localhost:8080). Como eles são origens diferentes, o navegador bloqueia. O CORS é a chave que abre essa porta de forma segura.

Como o CORS funciona na prática?

Imagine uma conversa entre o navegador e o servidor.

1. Requisições Simples (Simple Requests)

Se a requisição for básica (tipo um GET simples), o navegador manda a requisição com um cabeçalho Origin:

GET /api/usuarios HTTP/1.1 Origin: https://meu-app.com

Se o servidor aceitar, ele responde com:

HTTP/1.1 200 OK Access-Control-Allow-Origin: https://meu-app.com

Se esse cabeçalho não vier na resposta, o navegador bloqueia tudo e você vê o erro vermelho.

2. Preflight Requests (O famoso OPTIONS)

Se você tentar fazer algo mais "perigoso", como enviar um JSON (Content-Type: application/json) ou usar um método DELETE, o navegador é mais cauteloso.
Ele manda uma requisição de teste antes, chamada Preflight, usando o método OPTIONS.

Navegador: "Posso mandar um POST com JSON?"
Servidor: "Pode sim! Manda ver." (Access-Control-Allow-Methods: POST)

Só depois desse "ok" do servidor é que a requisição real acontece.

Resolvendo os Erros Mais Comuns

Chega de teoria, vamos para a prática! Como consertar?

Erro 1: "No 'Access-Control-Allow-Origin' header is present"

Causa: O servidor não enviou o cabeçalho permitindo o seu site.
Solução: Você precisa configurar o Back-end. Não adianta tentar hackear o front-end!

  • Node.js (Express): Use o pacote cors. É super simples:
    const cors = require('cors'); app.use(cors({ origin: 'https://meu-app.com' }));
  • Java (Spring Boot): Use a anotação @CrossOrigin.

Erro 2: O erro do Wildcard '*' com Credenciais

Se você precisa enviar cookies ou autenticação (withCredentials: true), você NÃO pode usar Access-Control-Allow-Origin: *. O navegador proíbe isso por segurança.

Solução:
O servidor deve retornar exatamente o domínio que está pedindo acesso.

Access-Control-Allow-Origin: https://meu-app.com Access-Control-Allow-Credentials: true

Erro 3: CORS no Localhost (Desenvolvimento)

Ninguém merece configurar CORS só para rodar o projeto na máquina local, né?

Solução: Use um Proxy!
Ferramentas como Vite, Next.js ou Create React App têm uma configuração de proxy.
O navegador manda a requisição para o seu servidor de desenvolvimento (mesma origem), e ele repassa para o back-end. O navegador nem percebe que trocou de servidor, e o CORS não te incomoda!

// vite.config.js export default { server: { proxy: { '/api': 'http://localhost:8080', // Redireciona tudo de /api para o back-end }, }, };

Conclusão

O CORS pode parecer um vilão no começo, mas ele é essencial para a segurança da Web. Entender como ele funciona te coloca um passo à frente na hora de debugar problemas de integração.

Espero que esse guia tenha clareado as coisas! Se você curtiu, compartilha com aquele amigo que está sofrendo com erros de API agora mesmo. 😄

Ah, e se você estiver lidando com muitos dados JSON e precisar validar se está tudo certinho antes de enviar para o servidor, dá uma olhada no nosso Formatador e Validador JSON. É uma mão na roda para evitar erros de sintaxe!

Valeu, e bom código! 🚀

webhttpsecuritycorstroubleshooting

Explore ferramentas relacionadas

Experimente estas ferramentas gratuitas do Pockit