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

Flask服务AJAX调用触发CORS错误及访问地址配置问题

问题1:服务访问地址说明

Flask配置host='0.0.0.0'代表监听部署机器的所有可用网卡接口,前端请求的接口地址规则为:http://[部署Flask服务的机器可访问IP]:5000/[接口路径]
如果调用IP无法访问,按以下步骤排查:

  • 先在部署Flask的机器本地访问http://127.0.0.1:5000/api/v1/resources/device/all?type=A,确认服务本身可以正常返回响应
  • 检查部署机器的防火墙是否开放了5000端口的入站TCP规则,Windows服务器需要在防火墙高级设置中新增端口放行规则,Linux服务器需要在ufw/firewalld中开放对应端口
  • 如果是跨公网访问,需要确认部署机器有公网IP,且对应端口没有被运营商封禁,必要时可更换为8080、8000等常用端口测试
问题2:CORS错误修复方案

你当前代码最核心的问题是执行顺序错误:app.run()是阻塞启动服务的方法,你把它放在了CORS初始化、路由定义的前面,导致服务启动后后续的所有配置都没有生效,CORS配置完全没有加载。
按以下步骤修复即可:

  1. 调整代码执行顺序,将app.run()放在所有配置、路由定义的末尾,建议加上if __name__ == '__main__'的启动判断,避免被其他文件导入时误启动服务,参考代码如下:
import flask
from flask import request, jsonify
from flask_cors import CORS
    
app = flask.Flask(__name__)
# 初始化全局CORS配置,所有/api前缀的接口允许跨域
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
app.config['CORS_HEADERS'] = 'Content-Type'

# 定义路由
@app.route('/api/v1/resources/device/all', methods=['GET'])
def api_all():
    # 这里写你的业务逻辑
    result = {} # 你的返回数据
    status_code = 200
    return jsonify(result),status_code

# 最后启动服务
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=False)
  1. 不需要同时使用全局CORS配置、@cross_origin装饰器、手动加Access-Control-Allow-Origin响应头三种跨域配置,选全局配置一种即可,避免规则冲突
  2. AJAX请求无需额外加crossDomain: true参数,保留原有逻辑即可
  3. 测试时请通过IIS的站点地址访问前端页面,不要直接打开本地HTML文件发起请求,本地文件的origin为null,部分浏览器依然会拦截跨域请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:09:03