我有两个 AWS EC2 实例,一个用于 JavaScript 网页,一个用于 Django 服务器。
Django 服务器位于私有子网中,JavaScript 位于公共子网中。
我的JavaScript
fetch
代码如下
fetch('http://10.0.136.201:8080/evaluation/get-price/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(formData)
})
.then(response => response.json())
.then(data => {
console.log('Success:', data);
document.getElementById('result').textContent = String(Math.round(Number(JSON.stringify(data['answer'])))) + "원";
})
.catch((error) => {
console.error('Error:', error);
alert('오류가 발생했습니다. 다시 시도해주세요.');
});
我的curl命令是这样的
curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' http://10.0.136.201:8080/evaluation/get-price/
我可以从Django服务器日志中看到curl请求,并且它成功返回响应,但是当我在JavaScript中使用fetch时,即使没有任何JavaScript请求的日志。
浏览器有问题吗?我认为AWS安全组没有问题,因为curl命令运行良好。
该curl请求是针对私有IP地址的,因此该命令只能在VPC内运行。您的 JavaScript Web 应用程序实际上并不在 VPC 中的服务器上运行,而是在查看您网页的用户的 Web 浏览器中运行。提供 JavaScript Web 应用程序的服务器只是向 Web 浏览器提供原始文件,代码实际上在 Web 浏览器上执行。
实际运行 JavaScript 的计算机(用户的笔记本电脑/台式电脑)不在 VPC 中,并且没有到私有 Django 服务器的网络路由。
您必须以某种方式将您的 API/Django 服务器暴露给互联网,要么将其公开,要么在其前面放置 API 网关之类的东西,或者通过配置提供 JavaScript 代码的服务器来代理 API 请求Django 服务器。