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

部署Google Cloud Run后Flask API遇CORS策略拦截问题求助

Cloud Run部署Flask API后CORS错误的排查与解决

一、先核对接口路由匹配

你JS代码请求的是/getOpenedAccounts/<uid>,但Flask代码里仅定义了/getCustomerDetails/<customerID>路由——如果这不是粘贴失误,这是核心问题:请求的接口不存在,预请求(OPTIONS)自然无法返回正确的CORS响应头。先确认JS请求路径和Flask路由完全一致。

二、优化Flask CORS配置

你已经引入flask-cors并全局初始化CORS(app),但又手动添加Access-Control-Allow-Origin头,这可能导致头重复或配置冲突。建议:

  • 删除手动添加的resp.headers['Access-Control-Allow-Origin'] = '*',交由flask-cors统一处理CORS逻辑
  • 生产环境建议显式指定允许的源,而非通配符,示例:
    CORS(app, origins=["https://你的Web应用域名"])
    
  • 确保flask-cors依赖为最新版本,旧版本可能存在兼容性问题

三、Cloud Run层面排查

Cloud Run默认不会拦截CORS响应头,但需检查以下场景:

  • 若使用自定义域名或Cloud CDN,确认CDN缓存规则未缓存OPTIONS请求的响应,否则可能导致CORS头丢失
  • 核对Cloud Run服务配置的容器端口与Flask监听端口一致(Flask默认5000),端口不匹配会导致请求无法到达应用
  • 查看Cloud Run日志,确认OPTIONS请求是否成功到达Flask应用,以及响应头中是否包含Access-Control-Allow-Origin

四、必须修复的SQL注入漏洞

你的Flask代码通过字符串拼接构造SQL语句:

query1 = ("select * from customer Where customerID = '" + customerID +"';")

这存在严重的SQL注入风险,必须改为参数化查询:

query1 = "select * from customer Where customerID = %s;"
cursor.execute(query1, (customerID,))

五、快速测试方法

用curl直接测试API的OPTIONS请求,验证响应头:

curl -X OPTIONS -H "Origin: https://你的Web应用域名" -i https://你的CloudRunAPI域名/getCustomerDetails/testID

若响应中无Access-Control-Allow-Origin,问题出在Flask配置;若有,则需排查Web应用端或中间层拦截问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:12:24