NGINX add_header,添加多个头


21

我正在尝试发送多个标题

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

有什么解决方案?

Answers:


28

好吧,是的,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;
}

好吧,后者在FireFox 9或任何其他版本中不起作用。哪个问题。
Gajus 2012年

1
@Guy也不应该。参见编辑。
Shane Madden

注意:如果给定的解决方案对您不起作用,请阅读。它很有启发性,您可能会发现它不起作用的原因。
its_me

Access-Control-Allow-Origin的值可以为regexp吗?
haxpanel

您介意将您的示例扩展到多个来源(例如http://example.comhttp://localhost:3000)吗?
奥古斯丁·里丁格


-1

我遇到了与网络中的多个子域相同的问题,试图访问资源,nginx但设置不正确。这是我固定的方法。

add_header Access-Control-Allow-Origin https://*.your-domain-name.com;

我希望这有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.