我在一个react 前端工作,以图表从一个快速API后端的一些数据.我使用了几个下拉组件来更改所请求数据的月份和年份.对于初始呈现,FETCH请求工作正常,并返回数据和图表显示.一旦我更改了下拉列表,我就会在浏览器控制台中看到以下CORS策略错误.

CORS策略已阻止访问从源https://fake-url.com/endpoint/‘获取http://localhost:3000’:对印前判断请求的响应未通过访问控制判断:请求的资源上不存在"Access-Control-Allow-Origin"标头.如果一个不透明的响应满足您的需求,请将请求的模式设置为‘no-CORS’,以便在禁用CORS的情况下获取资源.

使用FETCH调用react 代码片段:

 const [month, setMonth] = useState(1);
 const [year, setYear] = useState('2023');
 const [revenueData, setRevenueData] = useState({});

 useEffect(() => {
     const inputs = {
     "month": month,
     "year": year,
     "duration": 1
     }

     const myHeaders = new Headers();
     myHeaders.append("X-API-KEY", "fake-api-key");
     myHeaders.append("Content-Type", "application/json");

     const requestOptions = {
         method: 'POST',
         headers: myHeaders,
         body: JSON.stringify(inputs),
         redirect: 'follow'
     };

     fetch("https://fake-url.com/endpoint/", requestOptions)
         .then(response => response.json())
         .then(data => {
             setRevenueData((data))
         }).catch(error => {
             console.log('error', error)
        });
 }, [month, year]);

我确认我在FastAPI中使用的是CORSMiddleware,设置如下:

app.add_middleware(HTTPSRedirectMiddleware)

app.add_middleware(
    CORSMiddleware,
    allow_origins=['*'],
    allow_methods=['*'],
    allow_headers=['*']
)

I also confirmed that the backend is returning access-control headers for preflight with an options request in postman as shown: response in postman

UPDATE

网络面板显示第二次请求印前判断成功,但最终因内部服务器错误而失败.这让我想到了:

CORS and Internal Server Error responses

dev tools Network Panel

推荐答案

request ends in an error时,即返回具有诸如4xx5xx之类的状态代码的响应时,CORS标头是not added.

如您提供的屏幕截图所示,当第三次调用dashboard_data/ API端点时,服务器响应500 Internal Server Error响应代码,表示服务器遇到了意外情况,无法完成请求.因此,在这种情况下,服务器不会包含适当的Access-Control-Allow-Headers / Access-Control-Allow-Origin头,浏览器将在devtools控制台中报告CORS错误.因此,请首先判断导致服务器端错误的原因,并try 修复它(运行服务器的控制台应该会给您提供有关此问题的见解).

在CORS概念中的相关答案可能会对future 的读者有所帮助,可以在here以及herehere中找到.

Python相关问答推荐

如何以实现以下所述的预期行为的方式添加两只Pandas pyramme

在Python中使用readline函数时如何向下行

如何将自动创建的代码转换为类而不是字符串?

将numpy数组与空数组相加

Flask主机持续 bootstrap 本地IP| Python

按照行主要蛇扫描顺序对点列表进行排序

如何根据情况丢弃大Pandas 的前n行,使大Pandas 的其余部分完好无损

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

重新匹配{ }中包含的文本,其中文本可能包含{{var}

可变参数数量的重载类型(args或kwargs)

如果值不存在,列表理解返回列表

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

Pandas—合并数据帧,在公共列上保留非空值,在另一列上保留平均值

我如何根据前一个连续数字改变一串数字?

如何在Polars中从列表中的所有 struct 中 Select 字段?

未知依赖项pin—1阻止conda安装""

将scipy. sparse矩阵直接保存为常规txt文件

try 检索blob名称列表时出现错误填充错误""

在Python中调用变量(特别是Tkinter)

为什么常规操作不以其就地对应操作为基础?