Curious TechieDev Toolbox
Todos os Guias/Padrões Web9 min read

O que é CORS e a Política de Mesma Origem (SOP)?

Entenda o Cross-Origin Resource Sharing: requisições preflight OPTIONS, cabeçalhos de controle e prevenção de falhas de segurança.

Principais Conclusões
  • A Política de Mesma Origem (SOP) impede scripts de ler respostas de origens com protocolo, domínio ou porta divergentes.
  • O CORS é o mecanismo pelo qual servidores declaram quais origens externas têm permissão para consumir suas APIs.
  • Requisições preflight OPTIONS verificam métodos e cabeçalhos antes do envio de chamadas potencialmente perigosas.
  • O uso de Access-Control-Allow-Origin: * é estritamente bloqueado quando há envio de cookies ou tokens autenticados.
  • O CORS é verificado e aplicado pelo navegador web do cliente, não por requisições diretas servidor para servidor.

1. O que é a Política de Mesma Origem (SOP)?

A Same-Origin Policy (SOP) é uma fronteira fundamental de segurança nos navegadores para isolar documentos potencialmente perigosos. Sob a SOP, o JavaScript em https://banco.com não pode acessar cookies ou respostas Fetch de https://malicioso.com.

Duas URLs compartilham a mesma origem se e somente se seu Protocolo, Host (Domínio) e Porta forem exatamente iguais:

https://api.example.com:443 vs https://example.com:443ORIGENS DIFERENTES (Subdomínio divergente)
http://example.com:80 vs https://example.com:443ORIGENS DIFERENTES (Protocolo divergente: HTTP vs HTTPS)
https://example.com/app vs https://example.com/apiMESMA ORIGEM (Diferença de caminhos é permitida)

2. Como o CORS Viabiliza Acesso Seguro Entre Origens

O CORS (Cross-Origin Resource Sharing) permite aos servidores declarar via cabeçalhos HTTP quais origens externas têm permissão de leitura sobre seus recursos:

  • Access-Control-Allow-Origin: Especifica as origens com permissão (ex.: https://app.curious-techie.com).
  • Access-Control-Allow-Methods: Métodos HTTP permitidos (ex.: GET, POST, PUT, DELETE).
  • Access-Control-Allow-Headers: Cabeçalhos permitidos no pedido (ex.: Content-Type, Authorization).
  • Access-Control-Max-Age: Tempo de cache (em segundos) para a resposta de preflight OPTIONS.

3. Requisições OPTIONS de Preflight & Cache

Em requisições complexas (como envio de JSON com Content-Type: application/json ou cabeçalhos Authorization), o navegador dispara automaticamente uma verificação preliminar HTTP OPTIONS (preflight) antes de transmitir a carga real.

4. A Armadilha de Credenciais e Curinga (*)

Um dos erros de segurança mais recorrentes ao compartilhar sessões autenticadas entre domínios:

Combinação Inválida pela Norma: Access-Control-Allow-Origin: * + Access-Control-Allow-Credentials: true

Os navegadores recusam terminantemente expor respostas se o curinga * for usado com credenciais ativadas. O backend deve responder com a Origin específica do cliente após validá-la.