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

Flask-CORS未拦截非允许来源请求的问题排查与方案咨询

问题分析与修复方案

当前配置的错误点

  • 资源匹配规则无效:你在cors.init_app里写的{"r/*": {"origins": ...}}是错误的路由匹配规则,你的接口路由是/api,这个规则完全没覆盖到该路由,导致CORS限制根本没生效,所以localhost:8000能随意访问。
  • 配置冗余冲突:同时通过app.config设置CORS_ORIGINS和cors.init_app里的origins,容易导致配置优先级混乱,建议统一用一种方式配置。

修正后的代码示例

方式1:全局配置(所有路由生效)

from flask import Flask, jsonify
from flask_cors import CORS

def create_app():
    app = Flask(__name__, instance_relative_config=True)
    # 允许的域名,多域名用列表形式,比如["http://localhost:8000", "https://your-prod-domain.com"]
    allowed_origins = ["http://localhost:8000"]
    CORS(app, origins=allowed_origins)
    
    @app.route('/api')
    def api():
        return jsonify({'success': "Healthy: OK"}), 201

    return app

方式2:指定路由生效(精细控制)

from flask import Flask, jsonify
from flask_cors import CORS

def create_app():
    app = Flask(__name__, instance_relative_config=True)
    cors = CORS()
    # 仅对/api路由应用CORS限制
    cors.init_app(app, resources={"/api": {"origins": "http://localhost:8000"}})
    
    @app.route('/api')
    def api():
        return jsonify({'success': "Healthy: OK"}), 201

    return app

更优的API访问限制方案

  1. 区分环境配置:用环境变量加载不同的允许域名,避免硬编码,适配开发/生产环境:
import os
from flask import Flask, jsonify
from flask_cors import CORS

def create_app():
    app = Flask(__name__, instance_relative_config=True)
    # 从环境变量读取,多域名用逗号分隔
    allowed_origins = os.getenv("ALLOWED_CORS_ORIGINS", "http://localhost:8000").split(",")
    CORS(app, origins=allowed_origins)
    
    @app.route('/api')
    def api():
        return jsonify({'success': "Healthy: OK"}), 201

    return app

启动时设置环境变量:

# 开发环境
export ALLOWED_CORS_ORIGINS="http://localhost:8000"
# 生产环境
export ALLOWED_CORS_ORIGINS="https://your-production-domain.com"
  1. 额外安全加固:如果需要更高安全性,可在接口中添加自定义验证逻辑,比如手动检查请求头的Origin是否在允许列表内,或者结合API密钥、Joken验证等方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:57:45