FastAPI添加CORSMiddleware后POST请求重定向仍报CORS错误
问题原因
- CORS配置本身不符合浏览器规则:你同时配置了
allow_credentials=True和allow_origins=['*'],这是W3C CORS规范明确禁止的行为:当允许跨域请求携带凭证(Cookie、HTTP认证信息等)时,不能使用通配符*作为允许的源,浏览器检测到该冲突会直接拦截请求,抛出CORS错误。 - 重定向逻辑和AJAX请求不兼容:你通过XMLHttpRequest发起POST请求,后端返回307重定向到外部站点时,XHR会自动跟随重定向请求外部站点的资源,但外部站点不会为你的源
http://127.0.0.1:8080返回允许跨域的响应头,浏览器会因为跨域目标站点未授权抛出CORS错误。
解决方案
- 修正CORS配置:删除
allow_origins列表中的通配符*,仅保留实际需要的业务源地址即可:
app.add_middleware( CORSMiddleware, allow_credentials=True, allow_origins=['http://127.0.0.1:8080'], allow_methods=["*"], allow_headers=["*"], )
- 调整重定向实现逻辑:不要通过AJAX请求响应重定向的方式跳转外部页面,可选两种实现方案:
- 后端POST接口处理完成后,将重定向目标地址放在响应体中返回,前端收到响应后通过
window.location.href = 目标地址主动跳转 - 放弃AJAX提交方式,改用原生表单提交POST请求,表单提交触发的重定向是浏览器整页跳转,不会触发CORS校验
- 后端POST接口处理完成后,将重定向目标地址放在响应体中返回,前端收到响应后通过
内容的提问来源于stack exchange,提问作者Tomer
相关产品推荐
相关产品推荐

