AngularJS调用Python API遇CORS错误:Access-Control-Allow-Origin缺失求解
解决AngularJS调用Python API时的CORS跨域错误
别担心,这个问题其实非常常见,本质是浏览器的同源策略在限制跨域请求!你的前端运行在http://0.0.0.0:8000,而Python API在http://localhost:3000,两者端口不同属于不同的“源”,浏览器会默认阻止这种跨域请求,除非API明确返回允许跨域的响应头。
下面给你几种可行的解决方案,按推荐程度排序:
方案1:给Python API添加CORS支持(最推荐)
这是标准且通用的解决办法,只需要在你的Python API中添加Access-Control-Allow-Origin响应头,不同框架的实现方式略有不同:
如果用Flask框架
- 先安装
flask-cors扩展:pip install flask-cors - 在你的Flask应用中启用CORS:
from flask import Flask from flask_cors import CORS app = Flask(__name__) # 开发环境可以直接允许所有源,生产环境记得替换成你的前端域名 CORS(app) # 你的API路由和业务逻辑代码...
如果用Django框架
- 安装
django-cors-headers包:pip install django-cors-headers - 修改
settings.py配置:INSTALLED_APPS = [ # 其他已有的app... 'corsheaders', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', # 放在CommonMiddleware之前 'django.middleware.common.CommonMiddleware', # 其他中间件... ] # 开发环境允许所有源,生产环境改为具体的前端域名列表 CORS_ALLOW_ALL_ORIGINS = True
如果是自定义的Python HTTP服务器
如果是自己手动实现的HTTP服务器(比如基于BaseHTTPServer),可以直接在响应中添加头:
def do_GET(self): # 处理你的请求逻辑,生成要返回的JSON数据 response_data = '{"key": "value"}' self.send_response(200) # 允许所有源跨域,生产环境替换为你的前端域名 self.send_header('Access-Control-Allow-Origin', '*') self.send_header('Content-Type', 'application/json') self.end_headers() self.wfile.write(response_data.encode('utf-8'))
方案2:开发环境临时替代(不推荐用于生产)
如果你只是在本地开发测试,不想修改API代码,可以用以下临时方法:
- 浏览器插件:安装Chrome的
Allow CORS: Access-Control-Allow-Origin插件,临时禁用浏览器的同源策略限制(仅开发用,上线前记得关闭)。 - 前端代理:如果用Node.js工具链,可以用
http-proxy-middleware把前端的API请求转发到Python API的端口,避免跨域。
额外说明
你的AngularJS控制器代码是没问题的,只要API那边正确处理了CORS,请求就能正常返回数据并赋值给$scope.Clientes。
生产环境一定要注意:不要用*允许所有源,要指定具体的前端域名(比如http://your-production-frontend.com),避免安全风险。
内容的提问来源于stack exchange,提问作者Nerdrigo
相关产品推荐
相关产品推荐

