You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多个域名配置`Access-Control-Allow-Origin`跨域响应头

Next.js API端点多域名CORS配置可行性说明

你提到的直接在Access-Control-Allow-Origin头中用逗号分隔多个域名的写法不符合CORS标准规范,浏览器无法识别这种配置,跨域请求会直接被拦截。

正确配置方案

CORS标准规定Access-Control-Allow-Origin头仅支持三种取值:单个完整源地址、*通配符、null,不支持直接拼接多个源地址。在Next.js中要实现多个指定域名跨域放行,需要在API路由逻辑中动态判断请求来源,匹配到允许的域名后再设置对应响应头:

// 允许跨域的域名列表
const ALLOWED_ORIGINS = [
  'https://foo1.example',
  'https://foo2.example',
  'https://foo3.example'
]

export default function handler(req, res) {
  const requestOrigin = req.headers.origin
  // 匹配到允许的域名后设置对应的CORS头
  if (ALLOWED_ORIGINS.includes(requestOrigin)) {
    res.setHeader('Access-Control-Allow-Origin', requestOrigin)
  }
  // 按需配置其他CORS规则
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization')

  // 处理OPTIONS类型的预检请求
  if (req.method === 'OPTIONS') {
    return res.status(200).end()
  }

  // 后续业务逻辑
  res.status(200).json({ data: '请求处理完成' })
}

注意事项

  • 如果你的业务需要支持带凭证(Cookie、HTTP认证信息等)的跨域请求,不能使用*通配符,必须使用上述动态匹配来源的方案,同时额外添加配置res.setHeader('Access-Control-Allow-Credentials', 'true')。
  • 本地开发阶段可以把前端本地服务地址(比如http://localhost:3000)加入允许域名列表,避免开发阶段出现跨域报错。

内容的提问来源于stack exchange,提问作者guest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:15:03