【发布时间】:2020-12-15 18:01:28
【问题描述】:
我正在开发一个精简的应用程序,它使用 FastAPI 后端与我的组织本地的 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_CONNECTION_REFUSED 也是。
我的 EC2 实例的 AWS 安全组允许从任何 IP 到端口 5000 和 8000 的 TCP 流量。这是我的两个应用程序分别托管的位置,Svelte 和 FastAPI。
【问题讨论】:
标签: python amazon-web-services cors fastapi