Base de Conhecimento

Como ativar CORS no seu site/domínio (.htaccess, Apache) — exemplos seguros imprimir

  • CDN, Access-Control-Allow-Methods, API, Access-Control-Allow-Headers, Access-Control-Allow-Origin, Nginx, cPanel, preflight OPTIONS, Access-Control-Allow-Credentials, CORS, cookies, imagens e fontes, Authorization, Apache, Vary Origin, .htaccess
  • 0

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.

Resumo rápido: Você pode liberar CORS no Apache via .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 OPTIONS está 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 OPTIONS ou 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;
  }
}
Boas práticas
• 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.

Palavras-chave: CORS, Access-Control-Allow-Origin, .htaccess, Apache, Nginx, credenciais, cookies, Authorization, preflight, OPTIONS, headers CORS, Vary Origin, CDN


Esta resposta lhe foi útil?
« Retornar