Javascript 快速CORS子域

Javascript 快速CORS子域,javascript,node.js,express,cors,Javascript,Node.js,Express,Cors,我有一个网站-https://example.com-调用API的调用-https://api.example.com-。API是用Express编写的,它用于允许来自站点的请求: app.use( cors({ credentials: true, origin: "https://example.com", }) ); 可通过https://example.com或通过https://www.example.com。如您所见,在API中,我显

我有一个网站-
https://example.com
-调用API的调用-
https://api.example.com
-。API是用Express编写的,它用于允许来自站点的请求:

app.use(
    cors({
        credentials: true,
        origin: "https://example.com",
    })
);
可通过
https://example.com
或通过
https://www.example.com
。如您所见,在API中,我显式地允许来自前一个地址的请求,但不允许来自后一个地址的请求。因此,如果有人通过后一个地址访问它,那么对API的请求将被拒绝

解决这个问题的通常方法是什么?显式允许两个
https://example.com
https://www.example.com
?或者有一种方法可以忽略子域
www

提前谢谢

--

编辑:

根据提议,我添加了
https://www.example.com
显式地连接到cors配置

app.use(
    cors({
        credentials: true,
        origin: ["https://example.com", "https://www.example.com"],
    })
);
但这不起作用。作为一种解决方法,我刚才做的是在
.htaccess
文件-Apache服务器中使用重写条件从
www
域重定向到非
www


但现在的问题是:为什么甚至允许
www.example.com
都不起作用?有什么共同的原因吗?

通常的方法是避免两个网站的来源不同,内容相同

配置
www.example.com
example.com
发出HTTP 301重定向


显式允许两个
https://example.com
https://www.example.com

那也行<代码>原点可以传递一个数组

或者有一种方法可以忽略子域www


origin
还可以传递一个正则表达式。

您需要同时允许这两个域。执行此操作的API有点复杂。基本上,您需要阅读以下内容:


origin
的值只能是字符串或作为函数实现的自定义逻辑。

如果站点可以在
https://example.com
https://www.example.com
,然后在npm cors配置中,您需要显式地允许这两种
https://example.com
https://www.example.com
。没有其他方法可以忽略/处理
https://www.example.com
。您可以为npm cors“origin”值指定一个正则表达式,如
https://(www.example.com
,但其效果与您仅指定一个具有显式值的数组相同。最终的效果是服务器要么发送回
https://example.com
作为显式值,或发送回
https://www.example.com
。浏览器会逐字处理该值,除非该值是
*
通配符。当然,除了指定允许的原点之外,您还可以选择为'origin'配置值指定通配符,然后我将显式设置它们。谢谢嗯,明确地设置它们不起作用。作为一种解决方法,我刚才做的是在
.htaccess
文件-Apache服务器中使用重写条件从
www
域重定向到非
www
域。但现在的问题是:即使允许
www.example.com
,为什么不起作用?我更新了问题,你试过使用正则表达式吗?谢谢!通过<代码>https://www.example.com不起作用。我更新了问题,因为它应该,对吗?@Nikita-应该。问题中没有什么可以说明为什么没有。谢谢!然后我会做一些测试,可能我遗漏了一些东西……这不就是将域作为一个带有
origin:[”的数组传递吗https://example.com", "https://www.example.com“]
?使用函数来实现这一点是非常过分的
app.use(
    cors({
        credentials: true,
        origin: function (origin callback) {
            switch (origin) {
                case "https://example.com":
                case "https://www.example.com":
                    callback(null, true); // allow these domains
                    break;
                default:
                    callback(new Error('Now allowed')); // block others
            }
        },
    })
);