Tempo estimado: 3–8 min | Nível: Intermediário
O CORS (Cross-Origin Resource Sharing) permite que seu site (origem A) acesse recursos hospedados em outro domínio/subdomínio (origem B). Você habilita CORS informando ao navegador quais origens podem acessar seus arquivos/API.
.htaccess. Evite * em APIs autenticadas. Para arquivos estáticos públicos (imagens, fontes), * costuma ser aceitável.Onde configurar (Apache / cPanel)
Envie/edite o arquivo .htaccess na pasta pública do seu site (ex.: public_html). As regras abaixo se aplicam ao Apache.
Exemplo 1 — CORS aberto para arquivos estáticos (imagens, fontes, CSS, JS)
Use quando os arquivos são públicos e não contêm dados sensíveis.
<IfModule mod_headers.c>
<FilesMatch "\.(jpg|jpeg|png|gif|webp|svg|css|js|woff|woff2|ttf|otf)$">
Header set Access-Control-Allow-Origin "*"
Header set Vary "Origin"
</FilesMatch>
</IfModule>
Exemplo 2 — Permitir apenas origens específicas (recomendado para APIs)
Troque pelos seus domínios. Mais seguro que *.
<IfModule mod_headers.c>
SetEnvIf Origin "^https?://(www\.)?(app\.meudominio\.com\.br|meusite\.com\.br)$" ORIGIN_OK=$0
Header always set Access-Control-Allow-Origin "%{ORIGIN_OK}e" env=ORIGIN_OK
Header always set Vary "Origin"
# Métodos e cabeçalhos (ajuste conforme sua API)
Header always set Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With"
# Pré-flight (OPTIONS)
Header always set Access-Control-Max-Age "600"
# Se precisar ler headers no front-end
Header always set Access-Control-Expose-Headers "Content-Length, Content-Type"
</IfModule>
Credenciais (cookies, Authorization) — cuidado!
Se sua API usa cookies ou header Authorization do navegador, você não pode usar *. Defina uma origem específica e ative credenciais:
<IfModule mod_headers.c>
# Substitua pela SUA origem exata:
Header always set Access-Control-Allow-Origin "https://app.meudominio.com.br"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header always set Access-Control-Allow-Headers "Content-Type, Authorization"
Header always set Vary "Origin"
</IfModule>
Importante: Com Allow-Credentials: true, o valor de Access-Control-Allow-Origin não pode ser *.
Pré-flight (requisições OPTIONS)
Algumas requisições (ex.: POST com Content-Type: application/json) fazem uma checagem OPTIONS antes. Garanta que seu app/servidor responde 200 ao OPTIONS na mesma rota:
- Se usa framework (Laravel, Node, etc.), certifique-se de que a rota/handler de
OPTIONSestá habilitada. - No Apache, as diretivas acima já devolvem headers; o back-end ainda precisa aceitar o método
OPTIONS(ou ignore no app).
Testes rápidos
- Abra o site no navegador → F12 → aba Network → clique na requisição → verifique os headers
Access-Control-*. - Se houver erro CORS no Console, o navegador mostrará qual header está faltando.
Erros comuns (e como evitar)
- Usar “*” em API com cookies/login — falhará; defina origem exata e ative
Allow-Credentials. - Esquecer “Vary: Origin” — caches/CDNs podem servir header errado para outra origem.
- Não liberar o método/headers usados — inclua em
Allow-Methods/Allow-Headers. - Bloqueio em CDN/WAF — ajuste as regras de segurança ou insira os headers no nível da CDN também.
- Aplicação não responde OPTIONS — habilite a rota
OPTIONSou configure o servidor/back-end para responder 200.
Notas para Nginx / outros ambientes
Se seu site usa Nginx (ou proxy reverso/CDN), os headers devem ser adicionados no servidor/proxy. Exemplo genérico Nginx:
location /api/ {
add_header Access-Control-Allow-Origin "https://app.meudominio.com.br" always;
add_header Access-Control-Allow-Credentials "true" always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;
add_header Access-Control-Allow-Headers "Content-Type, Authorization" always;
if ($request_method = OPTIONS) {
return 204;
}
}
• Para APIs, liste origens específicas (não use
* com login).• Para assets públicos, pode usar
* limitado por extensão (imagens, fontes).• Mantenha HTTPS e versões atualizadas do servidor/estrutura.
• Documente as origens autorizadas e revise periodicamente.
Modelo para abrir ticket
Assunto: Ativar/ajustar CORS no domínio
Domínio/API: [api.seudominio.com.br / seudominio.com.br]
Origens que devem acessar: [https://app.seudominio.com.br, https://www.seudominio.com.br]
Tipo de requisição: [com credenciais? (cookies/Authorization) Sim/Não] — [métodos/headers usados]
Erro no console: [cole a mensagem CORS do navegador]
Precisa de ajuda?
Fale com nosso suporte. Podemos aplicar a configuração correta para o seu caso (Apache/.htaccess, Nginx/CDN) e validar os headers.
- WhatsApp: Conversar no WhatsApp
- Ticket/Chat: acesse sua Central do Cliente e abra um chamado.
Palavras-chave: CORS, Access-Control-Allow-Origin, .htaccess, Apache, Nginx, credenciais, cookies, Authorization, preflight, OPTIONS, headers CORS, Vary Origin, CDN