启用服务发现的AWS ECS全栈应用CORS问题求助
问题分析与解决方案
核心问题
从浏览器报错信息可以明确,问题根源是请求URL缺少协议前缀:你发起的请求地址是api.example.terraform.com:3300/mysql,未指定http://或https://。浏览器会将无协议的URL视为相对路径或无法识别合法协议,进而触发跨域错误提示(实际是网络请求解析失败)。
而curl命令能正常工作,是因为命令行工具默认会为无协议URL补充http://前缀,请求能正确发送到后端。
修复步骤
1. 修改前端请求URL
找到前端代码中发起请求的位置(Dashboard.vue第29行),给请求URL添加http://前缀:
// 修改前 axios.get('api.example.terraform.com:3300/mysql') // 修改后 axios.get('http://api.example.terraform.com:3300/mysql')
2. 验证后端CORS配置(可选但建议)
虽然你已配置CORS,仍可确认配置是否允许前端的源地址(http://<public-IP>)。测试阶段可临时将CORS的origin设为*排除配置问题:
// Node.js后端示例配置 const cors = require('cors'); app.use(cors({ origin: '*', // 测试用,生产环境请指定具体域名 credentials: true }));
3. 确认服务发现域名的公网可解析性
确保api.example.terraform.com能被公网环境解析到后端服务的正确地址。可在本地浏览器直接访问http://api.example.terraform.com:3300/mysql,确认能正常返回数据。
额外排查点
- 检查后端服务的安全组和网络ACL,确保3300端口对前端所在公网IP开放(EC2内部curl能通不代表公网可访问)
- 后续若使用HTTPS,需将请求URL协议改为
https://,并确保后端配置了对应SSL证书
内容的提问来源于stack exchange,提问作者Somethingwhatever
相关产品推荐
相关产品推荐

