Teste CORS

CORS Checker

Verifique se uma API aceita requests do seu origin. Executa preflight OPTIONS e um request real, mostra todos os cabeçalhos Access-Control-*.

O que é CORS?

CORS (Cross-Origin Resource Sharing) é um mecanismo de segurança do navegador. Por padrão, um script em https://a.com não pode ler respostas de https://b.com. O servidor em b.com deve permitir isso enviando cabeçalhos Access-Control-Allow-Origin. Para requests não simples (POST com JSON, cabeçalhos custom, etc.), o navegador primeiro envia um OPTIONS "preflight" para checar permissão — se a resposta do servidor não permitir seu origin, método ou cabeçalhos, o request real é bloqueado e você vê um erro CORS no DevTools.

Cabeçalhos CORS de resposta explicados

Access-Control-Allow-Origin

Especifica qual origin é permitido. Um origin específico, "*" (qualquer), ou o origin do request repetido.

Access-Control-Allow-Credentials

Se "true", o navegador envia cookies/auth. Não pode ser combinado com Allow-Origin: *.

Access-Control-Allow-Methods

Quais métodos HTTP o servidor permite. Só relevante na resposta preflight.

Access-Control-Allow-Headers

Quais cabeçalhos de request o servidor permite. Relevante para cabeçalhos não simples como Authorization, X-*.

Access-Control-Expose-Headers

Quais cabeçalhos de resposta o navegador pode expor ao JavaScript. Por padrão só uma lista curta.

Access-Control-Max-Age

Quanto (segundos) o navegador pode cachear o resultado do preflight. Valores maiores evitam OPTIONS repetidos.

FAQ do CORS Checker

Por que meu navegador mostra erros CORS mas esta ferramenta mostra cabeçalhos?

CORS é aplicado pelo navegador, não pelo servidor. Esta ferramenta roda no nosso backend, então nenhuma regra CORS se aplica — vemos a resposta crua. Seu navegador bloqueia o request no cliente com base nos cabeçalhos Access-Control-*. Se os cabeçalhos aqui não combinarem com seu origin/método/cabeçalhos, o navegador bloqueará, mesmo que o servidor tenha respondido.

O que é um request OPTIONS preflight?

Para requests cross-origin "não simples" (qualquer coisa que não seja GET/HEAD/POST simples com cabeçalhos básicos), o navegador primeiro envia um OPTIONS perguntando "posso fazer este request?". O servidor responde com Access-Control-Allow-Methods, Allow-Headers e Allow-Origin. Se permitirem seu request real, o navegador prossegue. Caso contrário, bloqueia.

Por que Access-Control-Allow-Origin: * não é suficiente para meu request?

Se seu request inclui credentials (cookies, cabeçalho Authorization, cert cliente TLS), o navegador rejeita "*" e requer um origin específico. O servidor deve ecoar seu origin exato em Access-Control-Allow-Origin e definir Access-Control-Allow-Credentials: true.

CORS se aplica a requests server-to-server?

Não. CORS é puramente uma feature de segurança do navegador. curl, fetch do Node no servidor, Postman ou qualquer cliente não-navegador ignoram CORS. Se você vê "erro CORS" fora do navegador, o problema real está em outro lugar (rede, auth, URL errada).

Como corrijo um erro CORS?

Corrija no servidor, não no cliente. Adicione o Access-Control-Allow-Origin correto (seu origin de frontend), Allow-Methods (GET/POST/etc. que usa), Allow-Headers (cabeçalhos custom ou auth). Para credentials, Allow-Credentials: true. Garanta que OPTIONS seja tratado e retorne 2xx. Extensões de navegador que desabilitam CORS são atalho de dev — nunca implante uma app real dependendo delas.