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

FastAPI已配置允许所有跨域仍报CORS错误,是否与自定义Signature头有关

问题原因

  • 自定义的Signature请求头是触发问题的直接原因:这类非标准请求头会让浏览器判定当前请求为非简单请求,会优先发送OPTIONS预检请求校验跨域权限。
  • 核心配置漏洞:CORS规范明确要求,当跨域请求携带凭证(对应你配置的allow_credentials=True)时,Access-Control-Allow-Headers、Access-Control-Allow-Origin响应头不允许使用通配符*,哪怕后端配置了allow_headers=["*"],浏览器也不会将其识别为允许所有请求头,必须显式声明允许的请求头值。

解决方案

修改FastAPI跨域配置,将用到的所有请求头显式加入allow_headers列表即可,示例代码如下:

api.add_middleware(
    CORSMiddleware,
    allow_origin_regex=".*",
    allow_credentials=True,
    allow_methods=["*"],
    # 显式列出所有允许的请求头,包含自定义的Signature和默认的Content-Type等
    allow_headers=["Content-Type", "Signature"]
)

注:这里allow_origin_regex=".*"是生效的,因为FastAPI的CORSMiddleware会匹配请求的Origin字段,匹配通过后会直接将请求的Origin值作为Access-Control-Allow-Origin的响应值返回,不会返回通配符*,符合带凭证请求的CORS规则。

验证方式

配置修改完成后,在浏览器网络面板查看OPTIONS预检请求的响应头,确认Access-Control-Allow-Headers字段中包含Signature值即可正常发起请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:15:01