You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI部署于AWS API Gateway时POST/DELETE接口自动添加错误Access-Control-Allow-Origin的问题

解决FastAPI+AWS API Gateway下POST/DELETE请求的CORS头被覆盖问题

看起来你遇到的核心问题是AWS API Gateway的CORS配置优先覆盖了FastAPI返回的响应头,导致POST/DELETE请求的Access-Control-Allow-Origin被替换成API地址,而非你指定的*。下面是具体的排查和解决步骤:

一、先理清冲突根源

当你在API Gateway上部署Serverless应用时,API Gateway本身自带CORS配置能力。如果这个配置和你FastAPI里的CORSMiddleware、手动设置的响应头同时存在,API Gateway会优先使用它自己生成的头——这就是POST/DELETE请求头被替换的原因,而GET请求可能因为没有触发预检(OPTIONS)请求,所以FastAPI的头生效了。

二、分步解决

1. 移除FastAPI路由中重复的手动头设置

你已经在main.py里配置了CORSMiddleware,它会自动为所有请求(包括预检OPTIONS)处理CORS头,手动在每个路由里重复设置头不仅多余,还可能加剧冲突。把每个路由里的这些代码删掉:

response.headers['Access-Control-Allow-Origin'] = "*"
response.headers['Access-Control-Allow-Credentials'] = "true"
response.headers['Access-Control-Allow-Headers'] = "Origin, X-Requested-With, Content-Type, Accept, x-access-token"

保留CORSMiddleware的配置即可:

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

2. 同步AWS API Gateway的CORS配置(关键)

必须让API Gateway的CORS配置和你的需求完全一致,避免它覆盖后端返回的头:

如果用Serverless Framework部署

在serverless.yml的函数API配置中添加CORS规则:

functions:
  your-fastapi-function:
    handler: main.app
    events:
      - http:
          path: /{proxy+}
          method: any
          cors:
            origin: '*'
            credentials: true
            headers: Origin,X-Requested-With,Content-Type,Accept,x-access-token
            methods: GET,POST,DELETE,OPTIONS

如果直接在AWS控制台操作

  1. 进入API Gateway控制台,找到你的目标API;
  2. 选中/{proxy+}资源,点击顶部「Actions」→「Enable CORS」;
  3. 在弹窗中填写:
    • Access-Control-Allow-Origin:*
    • 勾选Access-Control-Allow-Credentials
    • Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,Accept,x-access-token
    • Access-Control-Allow-Methods:GET,POST,DELETE,OPTIONS
  4. 点击「Enable CORS and replace existing CORS headers」,然后重新部署API到dev阶段。

3. 验证结果

部署完成后,用curl测试POST/DELETE请求的响应头,确认Access-Control-Allow-Origin是*:

curl -v -X POST https://xxxxx.execute-api.xx-xxxxxx-x.amazonaws.com/dev/dimensioning

额外说明

当Access-Control-Allow-Credentials设为true时,部分浏览器对*的源有特殊限制,但你的问题根源是API Gateway替换了源,先解决这个问题后,再根据前端实际情况调整(比如如果需要带凭证,后续可以把allow_origins改成具体的前端域名列表)。

内容的提问来源于stack exchange,提问作者some_programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:48:10