我正在尝试发送多个标头
add_header Access-Control-Allow-Origin http://dev.anuary.com;
add_header Access-Control-Allow-Origin https://dev.anuary.com;
然而,NGINX 却把它们变成了
Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com
解决方案是什么?
答案1
嗯,是的,nginx 正在组合同名的标头..但它是根据 HTTP 规范这样做的。 请参阅第 4.2 节。
标头:
Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com
根据 HTTP/1.1 规范,功能等同于:
Access-Control-Allow-Origin: http://dev.anuary.com
Access-Control-Allow-Origin: https://dev.anuary.com
如果您的系统或应用程序只能读取一种格式而不能读取另一种格式,那么这就是问题所在。nginx 做得对。
编辑:
这Mozilla 文档指出只能有一个Access-Control-Allow-Origin
标题。
它的格式(看这里)应为以空格分隔的来源列表:
add_header Access-Control-Allow-Origin "http://dev.anuary.com https://dev.anuary.com";
但实际上,你应该是回显Origin
客户端提供的标头,而不是突然生成标头。这可能更合适:
if ($http_origin ~* "^https?://dev\.anuary\.com$" ) {
add_header Access-Control-Allow-Origin $http_origin;
}
答案2
我遇到了同样的问题,我的网络中有多个子域尝试访问资源,但nginx
设置不正确。下面是我修复它的方法。
add_header Access-Control-Allow-Origin https://*.your-domain-name.com;
我希望这有帮助。