【发布时间】:2019-11-15 20:29:27
【问题描述】:
我有一个站点 —https://example.com- 调用 API —https://api.example.com-。 API 是用 Express 编写的,它使用CORS package 来允许来自站点的请求:
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 也不起作用?有什么共同的原因吗?
【问题讨论】:
-
如果站点可以通过
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发回。浏览器按字面意思处理该值——除非该值是*通配符。当然,作为指定允许来源的替代方法,您始终可以选择为“来源”配置值指定*通配符 -
好的,那我就明确设置。谢谢!
-
嗯,明确设置它们不起作用。作为一种解决方法,我刚刚所做的是使用
.htaccess文件(Apache 服务器)中的重写条件从www域重定向到非www域。但现在的问题是:即使允许www.example.com,为什么不起作用?我更新了问题 -
你试过使用正则表达式吗?
标签: javascript node.js express cors