O Que É CORS? Segurança de Navegador entre Origens
CORS, compartilhamento de recursos entre origens, é um mecanismo de segurança do navegador que controla se uma página web de uma origem pode chamar uma API em uma origem diferente.
Os navegadores impedem que uma página leia livremente as respostas de uma origem diferente, a menos que o servidor opte por participar com cabeçalhos CORS. Isso protege os usuários, mas surpreende os desenvolvedores quando um frontend não consegue alcançar sua API após um deploy. O CORS é aplicado pelo navegador, então aparece em testes de frontend e end-to-end, não em chamadas de CI de servidor para servidor.
O que conta como entre origens
Uma origem é a combinação de esquema, host e porta. Uma requisição de app.example.com para api.example.com é entre origens porque os hosts diferem, mesmo sob o mesmo domínio pai.
O servidor opta por participar
O servidor concede acesso com cabeçalhos de resposta como Access-Control-Allow-Origin. Sem o cabeçalho correto, o navegador impede a página de ler a resposta mesmo que o servidor tenha respondido com sucesso.
Requisições de preflight
- Para requisições não simples, o navegador envia um preflight OPTIONS.
- O servidor precisa respondê-lo com os métodos e cabeçalhos permitidos.
- Um preflight que falha bloqueia a requisição real inteiramente.
Por que surpreende após deploys
Um frontend implantado em um novo domínio pode chamar uma API que ainda não lista essa origem, então as requisições são bloqueadas. Atualizar a configuração de CORS da API para incluir a nova origem resolve isso.
CORS em testes end-to-end
Testes baseados em navegador no CI exercitam o comportamento real do CORS. Uma falha de preflight ou um cabeçalho allow-origin ausente aparece como requisições de rede bloqueadas na execução do teste, espelhando o que os usuários encontrariam.
Configuração, não uma oscilação
Uma falha de CORS é determinística: o mesmo cabeçalho ausente bloqueia toda requisição até ser corrigido. Os runners da Latchkey fazem retry de falhas de rede genuinamente transitórias, mas uma má configuração de CORS é uma correção de config na API, não algo que um retry resolva.
Principais conclusões
- CORS é uma regra do navegador que rege o acesso a APIs entre origens, aplicada no lado do cliente.
- O servidor precisa enviar cabeçalhos allow-origin e responder a requisições de preflight.
- Uma falha de CORS é uma configuração determinística, não uma oscilação transitória de rede.