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

升级Quart相关包后quart-cors失效,CORS跨域错误求助

问题分析与解决办法

可能原因

  1. quart-cors 0.7.0 API 变更:新版本调整了全局CORS配置的生效逻辑,原有cors(app, allow_origin="*")的全局包装方式,可能不再自动覆盖重定向响应的头信息。
  2. Hypercorn 0.16.0 请求处理变化:新版本对重定向请求的响应头处理逻辑有调整,导致quart-cors无法正确注入CORS头。
  3. 重定向场景的CORS头缺失:请求发生了跨域重定向(从localhost:5173到abc.ai),浏览器要求重定向的3xx响应必须携带Access-Control-Allow-Origin头,但新版本组件组合未处理该场景。

解决步骤

1. 调整quart-cors配置方式

尝试改用QuartCORS类初始化全局配置(新版本官方推荐的写法):

from quart import Quart
from quart_cors import QuartCORS

app = Quart(__name__)
app = QuartCORS(app, allow_origin="*")

若全局配置仍不生效,给具体路由添加@cross_origin装饰器,确保单个路由的响应(包括重定向)能正确注入CORS头:

from quart_cors import cross_origin

@app.route("/api/blogs")
@cross_origin(allow_origin="*")
async def get_blogs():
    # 你的路由逻辑

2. 手动全局注入CORS头

添加全局响应处理函数,强制给所有响应(包括重定向)注入CORS头:

@app.after_request
async def add_cors_headers(response):
    response.headers["Access-Control-Allow-Origin"] = "*"
    response.headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS"
    response.headers["Access-Control-Allow-Headers"] = "Content-Type, Authorization"
    return response

这种方式可以绕过组件版本变更的逻辑差异,直接确保所有响应携带必要的CORS头。

3. 降级Hypercorn验证兼容性

若怀疑是Hypercorn版本问题,临时降级到原版本测试:

pip install hypercorn==0.14.4

如果降级后CORS恢复正常,说明新版本Hypercorn与quart-cors 0.7.0存在兼容性问题,可暂时保留旧版本或等待官方修复。

4. 消除路由重定向触发源

确认/api/blogs路由是否因路径定义(比如后端路由是/api/blogs/带斜杠,前端请求不带斜杠)导致自动重定向,若如此,修改前端请求路径为/api/blogs/,从根源上避免重定向引发的跨域问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:15:19