如何使用fastify-cors与Node.js配置多URL的CORS允许源
使用fastify-cors配置多个CORS允许源(Node.js)
要将你的CORS配置从通配符*改为指定多个允许的源,需注意两个核心要点:credentials: true时不能使用通配符,且允许的源必须包含完整协议(http/https)。以下是两种可行的配置方案:
方案一:直接传入源列表
将补全协议后的URL数组直接赋值给origin字段,fastify-cors会自动校验请求的Origin是否在列表内:
const urls = ["https://example1.com", "https://exam.com"]; const cors = require("fastify-cors"); // 注册CORS插件 fastify.register(cors, { origin: urls, methods: ['GET', 'POST'], credentials: true });
方案二:动态验证源(适配复杂场景)
如果需要更灵活的校验逻辑(比如允许子域名、本地开发环境),可以使用函数形式的origin配置:
const urls = ["https://example1.com", "https://exam.com"]; const cors = require("fastify-cors"); // 注册CORS插件 fastify.register(cors, { origin: (origin, callback) => { // 允许无Origin的请求(如curl)或列表内的合法源 // 可选:添加本地开发环境判断,例如 origin.startsWith('http://localhost') if (!origin || urls.includes(origin)) { callback(null, true); } else { callback(new Error("Not allowed by CORS")); } }, methods: ['GET', 'POST'], credentials: true });
关键注意事项
- 必须给URL加上完整的
http://或https://,浏览器发送的Origin请求头包含协议,仅写域名无法匹配。 - 当
credentials: true时,浏览器禁止使用通配符*作为允许源,必须指定具体源列表或动态校验逻辑。
内容的提问来源于stack exchange,提问作者Cyb3rGh0st
相关产品推荐
相关产品推荐

