TechPurger

Como resolver o erro de CORS no desenvolvimento de APIs

Publicado em: 24 de Maio de 2026 • Por: Rinaldo Purger

Se você já desenvolveu uma API e tentou consumí-la pelo frontend, provavelmente se deparou com um erro parecido com este no console do navegador:

Access to fetch at 'http://localhost:3001/api/dados' from origin 'http://localhost:3000' has been blocked by CORS policy.

Esse erro é um dos mais comuns no desenvolvimento web e tem uma solução direta.

O que é CORS?

CORS (Cross-Origin Resource Sharing) é um mecanismo de segurança dos navegadores que bloqueia requisições feitas de uma origem diferente da origem do servidor. "Origem" aqui significa a combinação de protocolo + domínio + porta.

Como resolver no Node.js/Express

A solução mais simples é usar o pacote cors:

npm install cors

Depois, adicione ao seu arquivo principal:

const express = require('express');
const cors = require('cors');
const app = express();

// Permite todas as origens (desenvolvimento)
app.use(cors());

// Ou configure origens específicas (produção)
app.use(cors({{
  origin: 'https://seu-frontend.vercel.app'
}}));

Configuração para produção

Em produção, nunca use cors() sem restrições. Defina explicitamente quais origens são permitidas para proteger sua API de requisições indesejadas.

Conclusão

O erro de CORS é simples de resolver com o pacote correto e uma configuração adequada. Em desenvolvimento use a liberação geral; em produção, sempre especifique as origens permitidas.

CORS em APIs serverless

Em Vercel Functions e Firebase Functions não há Express rodando. Configure CORS diretamente nos headers da resposta: res.setHeader('Access-Control-Allow-Origin', 'https://seusite.com'). Sempre trate o método OPTIONS separadamente para o preflight funcionar corretamente.

CORS com credenciais (cookies/sessão)

Se sua API usa cookies, retorne também Access-Control-Allow-Credentials: true e a origem não pode ser * — deve ser um domínio específico. No Express: cors({{'{'}} origin: 'https://seusite.com', credentials: true {{'}'}}).

CORS só existe no navegador

A política CORS é implementada pelo navegador, não pelo servidor. Se testar com curl, Postman ou Thunder Client, CORS não é bloqueado — pois essas ferramentas não são navegadores. O bloqueio acontece apenas quando JavaScript de um site tenta acessar outro domínio. Isso também significa que CORS não protege sua API de ataques diretos — é uma proteção para o usuário, não para o servidor.