NGINX add_header,添加多个标头

NGINX add_header,添加多个标头

我正在尝试发送多个标头

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;

我希望这有帮助。

相关内容