Curl 请求成功,但 JavaScript 获取失败

问题描述 投票:0回答:1

我有两个 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命令运行良好。

javascript amazon-web-services amazon-vpc
1个回答
1
投票

该curl请求是针对私有IP地址的,因此该命令只能在VPC内运行。您的 JavaScript Web 应用程序实际上并不在 VPC 中的服务器上运行,而是在查看您网页的用户的 Web 浏览器中运行。提供 JavaScript Web 应用程序的服务器只是向 Web 浏览器提供原始文件,代码实际上在 Web 浏览器上执行。

实际运行 JavaScript 的计算机(用户的笔记本电脑/台式电脑)不在 VPC 中,并且没有到私有 Django 服务器的网络路由。

您必须以某种方式将您的 API/Django 服务器暴露给互联网,要么将其公开,要么在其前面放置 API 网关之类的东西,或者通过配置提供 JavaScript 代码的服务器来代理 API 请求Django 服务器。

© www.soinside.com 2019 - 2024. All rights reserved.