发现 Cors 问题?"/>
AWS ECS 服务发现 Cors 问题?
我正在启用服务发现的情况下在 ECS 上实施全栈应用程序。该基础设施包括一个与 mysql RDS 数据库对话的后端和一个使用 VueJS 向 nodejs 后端发出请求的前端。当我从前端发出请求时,我遇到了一个 cors 问题。要重现这个问题:
克隆
地形初始化
地形规划
地形应用
当 mysql 实例启动并运行时,使用
连接到数据库并运行以下查询:mysql -h <endpoint> -u admin -padmin123
如果存在客户则删除数据库;
创建数据库客户; 使用客户; DROP TABLE IF EXISTS 书籍;
创建表格书籍( id int NOT NULL AUTO_INCREMENT, 名称 varchar(255) NOT NULL, 价格 int NOT NULL, 主键(id) );
INSERT INTO books VALUES (1,'Basic Economics', 20),(2,'Harry Potter', 15),(3,'Physics', 17); 从书中选择*
克隆
地形初始化
地形规划
地形应用
转到 ECS -> rolling-ls-cluster -> Tasks -> 在浏览器中输入公共 IP,然后单击按钮。
检查浏览器控制台(右键单击 -> 检查 -> 控制台),您将看到以下错误。
Access to XMLHttpRequest at 'api.example.terraform:3300/mysql' from origin 'http://<public-IP>' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome, https, chrome-untrusted.
GET api.example.terraform:3300/mysql net::ERR_FAILED
Uncaught (in promise) rt {message: 'Network Error', name: 'AxiosError', code: 'ERR_NETWORK', config: {…}, request: XMLHttpRequest, …}
但是,如果我创建一个 EC2 实例并使用
curl api.example.terraform:3300/mysql
,我收到回复了。
这是我的 NodeJS 后端:.js 并且我允许 cors 以及显式添加标头。安全组允许来自任何地方的所有流量。不知道为什么我会遇到这个 cors 问题。该应用程序在本地运行对我来说很好。我不确定问题到底出在哪里。任何帮助将不胜感激。
这是前端回购:.vue#L29 我正在使用 Axios 发出请求。
回答如下:问题是前端不负责向后端发出请求。它只提供 Javascript、HTML 和 CSS。在这种情况下发出请求的是浏览器。因此,您的浏览器/笔记本电脑与后端所在的网络不在同一个网络上。这就是为什么您仍然可以从 EC2 服务器发出请求的原因。
解决方案:设置一个 VPN 服务器(OpenVPN 或 AWS VPN)来与您的 VPC 网络交互。然后提出请求,它应该可以工作。或者,如果您可以使用公共 DNS,请遵循 Matt 的解决方案。但请记住,并非每个 API 都将面向公众。
或者您也可以通过代理服务器重新路由请求,在您的情况下,代理服务器可以是已经驻留在同一网络中的 EC2 实例。
更多推荐
AWS ECS 服务发现 Cors 问题?
发布评论