我正在开发一个小巧的应用程序,它使用FastAPI后端与PostgreSQL数据库交互,PostgreSQL数据库是我所在组织的本地数据库,而不是我的AWS EC2实例
我使用javascript的fetch api向后端发送请求,以查询数据库中的各种内容,在我的本地计算机上,所有这些请求都在两端接收,在AWS上,但是来自前端的请求甚至不能被fastAPI后端识别
我在设置这样的服务器方面相当缺乏经验,因此我假设在设置这些服务器时存在一些基本错误,使得它们之间在AWS上无法进行这样的通信
fastapi代码如下所示:
import uvicorn
from fastapi import (Depends, FastAPI, HTTPException, Query,
Request)
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI(debug=True)
origins = [
'*'
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == '__main__':
uvicorn.run(app, host="0.0.0.0", port=8000)
我的提取请求通常如下所示:
const endpoint = public_IP:8000 + `/`;
let objs = [];
fetch(endpoint)
.then(response => {
if (!response.ok) {
throw Error(response.statusText);
}
return response.json();
})
当我发送一个像上面那样的获取请求时,我得到一个CORS错误,原因是:CORS请求没有成功。FastAPI服务器没有反馈,请求似乎从未到达,我不确定为什么。据我所知,这通常与HTTP和HTTPS请求之间的问题有关,但这些似乎与我的问题无关,因为我的设置中没有一部分不使用HTTP。当使用chrome时,我得到一个错误:加载资源失败:net::ERR\u连接也被拒绝
我的EC2实例的AWS安全组允许从任何IP到端口5000和8000的TCP流量。这是我的两个应用程序的托管地,分别是Svelte和FastAPI
总结
CORS错误有时会令人困惑,因为错误信息不够清楚,并且有很多可能的解决方案
第一种可能性
0.0.0.0
)加载页面,然后尝试向另一个主机(例如127.0.0.1
)发出请求,则请求将被阻止以防止XSS攻击将主机从
0.0.0.0
更改为127.0.0.1
应该可以解决此问题第二种可能性
如果您是Mozilla人,Mozilla中存在bug[see,see],但如果是这种情况,您的代码应该在其他浏览器中工作
解决方案:您必须在每个端口上单独启用证书。
其他可能性
请尝试更改您的端点
对此
您在fastapi应用程序中的端点很可能引发异常。出现这种情况时,通过
app.add_middleware(...)
安装的CORSMiddleware
看不到任何HTTP响应,并且没有机会对FastAPI错误处理程序生成的HTTP响应执行其工作解决方案是使用CorsMiddle软件包装整个FastAPI应用程序,如下所示:
相关问题 更多 >
编程相关推荐