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

前端AJAX调用Databricks API遇CORS拦截,Flask配置CORS无效

前端调用Databricks API遭遇CORS拦截的解决方案

我尝试在前端通过AJAX发送GET请求,从Flask后端通过{{job_id}}获取job_id,前端AJAX代码如下:

function resultNotebook() {
  var jobRaw = '{{job_id}}';
  var job = jobRaw.split(''').join('"');
  var id = job.replace(/\D/g,'');

  console.log(job);
  console.log(id);
  $.ajax(
    "https://adb.14.azuredatabricks.net/api/2.0/jobs/runs/get",
    {
      type: "get",
      headers:{'Authorization': 'Bearer <TOKEN>' },
      async: false,
      dataType: "json",
      data: {
        "run_id":id 
      },
      success: function (response) {
        console.log(response);
      },
      error: function (errorMessage) {
        console.log(errorMessage);
      },
    }
  );
}
document.getElementById("execute").addEventListener("click", resultNotebook);

我已在Flask后端按如下方式配置flask_cors,但仍收到CORS拦截错误:

Access to XMLHttpRequest at 'https://adb.azuredatabricks.net/api/2.0/jobs/runs/get?run_id=10211260' from origin 'http://localhost:5000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

后端配置代码如下:

from flask_cors import CORS
app = Flask(__name__)
CORS(app, supports_credentials=True)
app.config['CORS_HEADERS'] = 'Content-Type'

问题分析

你的AJAX请求是直接发送给Azure Databricks第三方API,而非你的Flask后端。Flask的CORS配置仅对自身提供的接口生效,无法控制第三方服务的CORS策略,这就是配置了flask_cors依然报错的核心原因。

解决方案

方案1:通过Flask后端做请求代理

这是最稳妥的解决方式,让前端请求自己的Flask后端,再由后端转发请求到Databricks API:

  1. 在Flask后端新增代理路由:
import requests
from flask import request, jsonify

@app.route('/get-databricks-run', methods=['GET'])
def get_databricks_run():
    run_id = request.args.get('run_id')
    if not run_id:
        return jsonify({'error': 'run_id参数必填'}), 400
    # 转发请求到Databricks API
    url = f"https://adb.14.azuredatabricks.net/api/2.0/jobs/runs/get?run_id={run_id}"
    headers = {'Authorization': 'Bearer <TOKEN>'}
    response = requests.get(url, headers=headers)
    # 将Databricks的响应返回给前端
    return jsonify(response.json()), response.status_code
  1. 修改前端AJAX代码,改为请求Flask代理路由:
function resultNotebook() {
  var jobRaw = '{{job_id}}';
  var job = jobRaw.split('&#39;').join('"');
  var id = job.replace(/\D/g,'');

  console.log(job);
  console.log(id);
  $.ajax(
    "/get-databricks-run",
    {
      type: "get",
      async: false,
      dataType: "json",
      data: {
        "run_id":id 
      },
      success: function (response) {
        console.log(response);
      },
      error: function (errorMessage) {
        console.log(errorMessage);
      },
    }
  );
}
document.getElementById("execute").addEventListener("click", resultNotebook);

方案2:尝试配置Databricks API的CORS规则

部分云服务允许自定义CORS规则,你可以登录Azure Databricks控制台,查看是否能将http://localhost:5000添加到允许的来源列表中。但需要注意,Databricks API通常不推荐前端直接调用(存在Token泄露风险),因此更建议使用代理方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:45:36