Apache Configure CORS Headers for Whitelist Domains
In the current implementation of Cross Origin Resource Sharing (CORS) the Access-Control-Allow-Origin
header can only provide a single host domain or a wildcard as the accept value. This is not optimal when you have multiple clients connecting to the same virtual server and simply want to allow a list of known client host domains to the “allow” list.
Since only a single domain in a single access header can be delivered back to the client, Apache must read the incoming Origin
header and match it to the list of “white” (accepted) domains. If an appropriate match is found, echo the domain host back to client as the value of Access-Control-Allow-Origin
.
Use the following configuration snippet in the Apache virtual host “.conf” file or in the server “.htaccess” file. Ensure mod_headers
and SetEnvIfNoCase
are enabled.
<IfModule mod_headers.c>
SetEnvIfNoCase Origin "https?://(www\.)?(domain\.com|staging\.domain\.com)(:\d+)?$" ACAO=$0
Header set Access-Control-Allow-Origin %{ACAO}e env=ACAO
</IfModule>
The regular expression https?://(www\.)?(domain\.com|staging\.domain\.com)(:\d+)?$
matches the URL of Origin
, a required HTTP header for all requests. The pattern matches both the http
and https
protocols. It will match an optional www.
subdomain and finally matches the actual host name of your whitelist entries. Any characters after the domain name are ignored. This example will therefore enable:
* http://domain.com
* https://domain.com
* http://www.domain.com
* https://www.domain.com
* http://staging.domain.com
* https://staging.domain.com
* http://www.staging.domain.com
* https://www.staging.domain.com
If you send a request from http://staging.domain.com/app/
, the response would include the header:
Access-Control-Allow-Origin: http://staging.domain.com
If you sent another request from https://www.domain.com/client/
, the response would include the header:
Access-Control-Allow-Origin: https://www.domain.com
Recent Comments