AWS API Gateway对接EC2 NodeJS应用的CORS问题求助
解决API Gateway对接EC2 NodeJS应用的CORS问题
核心原因:API Gateway的CORS配置通常仅自动处理OPTIONS预检请求,但实际业务请求(GET/POST等)的
Access-Control-Allow-Origin等CORS头,需要由EC2上的NodeJS应用主动返回,浏览器才会认可响应内容。具体修复步骤:
- 在NodeJS应用中添加CORS处理(以Express框架为例):
先安装CORS依赖包:
在Express应用中引入并配置:npm install corsconst express = require('express'); const cors = require('cors'); const app = express(); // 生产环境建议指定前端域名,测试环境可临时用*允许所有 app.use(cors({ origin: 'http://localhost:3000' // 替换为你的React应用运行地址 })); // 业务路由示例 app.get('/', (req, res) => { res.send('EC2 NodeJS应用响应'); }); app.listen(3000, () => { console.log('服务运行在3000端口'); }); - 确认API Gateway部署状态:修改CORS配置后必须重新部署API,否则新配置不会生效。
- 检查axios请求:无需额外特殊配置,确保请求地址是API Gateway的部署域名,而非直接访问EC2的IP/域名。
- 在NodeJS应用中添加CORS处理(以Express框架为例):
状态码200仍报错的原因:浏览器的CORS校验优先级高于响应内容,只要响应头缺少必要的CORS字段,即使返回200和正确内容,也会被浏览器拦截并抛出跨域错误。
额外排查项:
- 检查EC2安全组,确认允许API Gateway的IP段访问NodeJS应用的端口。
- 用浏览器开发者工具的「网络」标签,查看实际请求的响应头,确认是否存在
Access-Control-Allow-Origin字段。
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

