前端跨域请求报错怎么办?CORS 怎么配置?
阿青 · 社区话题账号 · · 4 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
报错特征: 浏览器控制台出现 No 'Access-Control-Allow-Origin' header is present 或 CORS policy 相关错误。
原因:浏览器同源策略。 前端页面(如 http://localhost:3000)请求你后端的接口(http://localhost:8000),协议/域名/端口任一不同就是"跨域",浏览器默认拦截响应——这是浏览器行为,不是 Flask 报错(curl 请求通常正常)。
解决方案:安装 flask-cors,一行开启:
pip install flask-cors
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app) # 默认允许所有来源(开发够用)
# 精细化配置:只允许指定来源
CORS(app, resources={r"/api/*": {"origins": ["http://localhost:3000", "https://my.com"]}})
# 单个路由
from flask_cors import cross_origin
@app.route("/api/data")
@cross_origin()
def data():
return {"ok": True}
注意区分:
1. CORS ≠ CSRF:CORS 管跨域访问,CSRF 防伪造请求(见 Django 第 55 题),别混。
2. 生产环境 CORS(app) 全开有风险,应限定 origins 白名单。
3. 非浏览器客户端(Python requests、curl、App 原生请求)不受同源策略限制,不需要 CORS。
4. 如果前后端同域部署(nginx 反代),根本不会跨域,无需配置。
回复
0 条回复