RSS
菜单

前端跨域请求报错怎么办?CORS 怎么配置?

报错特征: 浏览器控制台出现 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 反代),根本不会跨域,无需配置。

下载推广海报

圈内讨论推广海报

《前端跨域请求报错怎么办?CORS 怎么配置?》完整推广海报
一起交流

全部回复 0

分享经验,让问题更进一步

讨论,从你的观点开始

还没有回复,欢迎补充经验或分享不同的思路。