Back-End

24 mai, 2016

Defina cabeçalhos Access-Control-Allow-Origin (CORS) no Apache vhost ou htaccess

Publicidade

Aqui está um copiar/colar bem rápido que você pode usar quando precisar definir cabeçalhos Access-Control-Allow-Origin em uma configuração Apache, ou em seu arquivo .htaccess.

Primeiro, apenas um lembrete rápido sobre Access-Control-Allow-Origin:

Por razões de segurança, os navegadores restringem solicitações HTTP com origem iniciadas de dentro de scripts. Por exemplo, XMLHttpRequest segue a mesma política. Assim, uma aplicação web usando XMLHttpRequest só poderia fazer solicitações HTTP para seu próprio domínio. Para melhorar as aplicações web, os desenvolvedores perguntaram a fornecedores de navegadores se poderiam permitir que XMLHttpRequest fizesse solicitações entre domínios.

[…]

CORS dá aos servidores web controle de acesso de domínio cruzado, o que permite transferência de dados entre domínios seguros.

– Access-Control-Allow-Origin

Assim, para usá-lo, você precisa definir os cabeçalhos corretos. Em seu .htaccess ou na configuração do seu servidor web Apache, adicione cabeçalhos como estes.

Header Set Access-Control-Allow-Origin "https://your.external.resource.tld"

O código acima permitiria que o site que envia esse cabeçalho solicitasse recursos (como solicitações de AJAX ou Webfonts) a partir do domínio “https: //your.external.resource.tld“. Cuidado com o protocolo, pois, nesse caso, ele só permitirá solicitações HTTPS. Solicitações HTTP ainda estariam bloqueadas.

Se você quiser desativar completamente o CORS (o que eu não recomendo, mas é útil para teste):

Header Set Access-Control-Allow-Origin "*"

Mas, como mencionado acima, é mais seguro definir o Access-Control-Allow-Origin para conter a lista de domínios da qual o aplicativo pode solicitar dados (ou enviar dados).

Se você tiver vários domínios e quiser definir um cabeçalho CORS com base nesse domínio, pode usar um truque legal como este:

SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com)quot; AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin

Porque só pode haver um domínio CORS no cabeçalho – você vai precisar ser criativo, se quiser usar isso em vários domínios.

***

Mattias Geniar faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://ma.ttias.be/set-access-control-allow-origin-cors-headers-apache-vhost-htaccess/