为何Next.js 13中Stripe Webhook不受CORS影响,自定义接口却有问题?
- CORS本质是浏览器的安全限制,只针对「从浏览器发起的跨域请求」生效,服务器与服务器之间直接发起的请求完全不受这个规则约束。
- Stripe的Webhook回调是Stripe的后端服务器直接向你的
app/api/webhook/route.ts发送请求,全程和浏览器无关,自然不会触发CORS检查,也就不会有跨域问题。 - 你的
app/api/newsletter/route.ts是被外部博客的前端(浏览器)调用的,属于「浏览器发起的跨域请求」,这时候浏览器会自动执行CORS安全校验,如果你的接口没配置允许该外部域名的跨域规则,就会抛出CORS错误。 - 补充:Next.js App Router的API路由默认只允许同源请求,要支持跨域需要手动配置响应头,比如在接口里添加:
export async function POST(request: Request) { // 允许指定域名跨域,生产环境不建议用*允许所有 const response = new Response(JSON.stringify({ message: '操作成功' }), { headers: { 'Access-Control-Allow-Origin': 'https://你的外部博客域名.com', 'Access-Control-Allow-Methods': 'POST', 'Access-Control-Allow-Headers': 'Content-Type', }, }); return response; }
内容的提问来源于stack exchange,提问作者Cesar Martin
相关产品推荐
相关产品推荐

