我正在尝试为所有子域、端口和协议启用 CORS。
例如,我希望能够运行从http://sub.mywebsite.com:8080/到https://www.mywebsite.com/的 XHR 请求*
通常,我想启用来自源匹配的请求(并且仅限于):
//*.mywebsite.com:*/*
基于 DaveRandom的回答,我也在玩,发现了一个稍微简单的 Apache 解决方案,它产生相同的结果(Access-Control-Allow-Origin动态设置为当前特定协议 + 域 + 端口),而不使用任何重写规则:
Access-Control-Allow-Origin
SetEnvIf Origin ^(https?://.+\.mywebsite\.com(?::\d{1,5})?)$ CORS_ALLOW_ORIGIN=$1 Header append Access-Control-Allow-Origin %{CORS_ALLOW_ORIGIN}e env=CORS_ALLOW_ORIGIN Header merge Vary "Origin"
就是这样。
那些想要在父域(例如 mywebsite.com)以及其所有子域上启用 CORS 的人可以简单地将第一行中的正则表达式替换为这个:
^(https?://(?:.+\.)?mywebsite\.com(?::\d{1,5})?)$.
^(https?://(?:.+\.)?mywebsite\.com(?::\d{1,5})?)$
注意:为了 规范合规性和正确的缓存行为,始终Vary: Origin为启用 CORS 的资源添加响应标头,即使对于非 CORS 请求和来自不允许来源的请求(参见示例为什么)。
Vary: Origin