CORS
CORS, sigla para Cross-Origin Resource Sharing, é o mecanismo de segurança do navegador que controla se uma página pode fazer requisições para um domínio diferente do seu.
CORS existe para proteger usuários contra requisições maliciosas entre sites diferentes. Por padrão, o navegador bloqueia chamadas de um domínio para uma API hospedada em outro domínio, a menos que o servidor de destino autorize explicitamente essa origem através de cabeçalhos HTTP específicos.
Um erro de CORS é uma das mensagens mais comuns que desenvolvedores fullstack encontram ao integrar frontend e backend hospedados em domínios ou portas diferentes durante o desenvolvimento.
CORS é resolvido no servidor, não no frontend
Um equívoco comum é tentar corrigir erros de CORS mexendo no código do frontend. A solução real está sempre na configuração do backend, que precisa declarar quais origens têm permissão de acesso através do cabeçalho Access-Control-Allow-Origin.
Como funciona na prática
- O navegador identifica que a requisição está sendo feita para uma origem diferente
- Uma requisição de verificação, chamada preflight, pode ser enviada automaticamente
- O servidor responde informando quais origens, métodos e cabeçalhos são permitidos
- Se a origem da requisição estiver autorizada, o navegador libera a resposta para o frontend
- Se não estiver autorizada, o navegador bloqueia o acesso e exibe um erro de CORS no console
Exemplo Prático
Um frontend em React rodando em localhost:3000 tenta consumir uma API rodando em localhost:4000. Sem configurar CORS no backend para autorizar essa origem, o navegador bloqueia a requisição mesmo que a API esteja funcionando normalmente.
Por que isso é importante?
CORS importa porque é uma das causas mais frequentes de integração quebrada entre frontend e backend, e entender o mecanismo evita horas de debug tentando resolver o problema no lugar errado.
Perguntas Frequentes (FAQ) sobre CORS
CORS é um problema de segurança do backend?
É uma proteção do navegador, mas a configuração de quais origens são permitidas fica sempre do lado do servidor.
Usar * em Access-Control-Allow-Origin é seguro?
Para APIs públicas sem dados sensíveis pode ser aceitável, mas para APIs autenticadas o recomendado é liberar apenas origens específicas e confiáveis.