Flask中配置CORS跨域访问的完整指南

七月
七月
发布时间:2026-10-13| 6人浏览过
原创

本文详细解析浏览器同源策略与跨域概念,介绍W3C制定的CORS规范。重点讲解如何在Flask后端通过安装flask-cors库,利用@cross_origin装饰器或CORS类进行局部及全局跨域配置,涵盖参数设置与Blueprints隔离配置,帮助开发者解决前后端分离开发中的跨域请求问题。

跨域概念与同源策略解析

1 跨域的理解

跨域场景通常指:浏览器A从服务器B获取了HTML、CSS或JavaScript等静态资源,随后在这些资源中的JavaScript代码通过Ajax技术去访问服务器C的静态资源或发起请求。简而言之,就是浏览器A从服务器B加载的资源,试图去访问服务器C的资源。

同源策略是浏览器的安全机制:当浏览器A从服务器B获取静态资源(如HTML、CSS、JS)时,为了保障用户数据安全,浏览器会限制其中的JavaScript代码只能通过Ajax访问服务器B自身的资源或发起请求。即:资源从哪里加载,就只能访问哪里。

所谓“同源”,是指请求必须满足三个条件完全一致:相同的请求协议(如均为Http或Https)、相同的IP地址、相同的端口号。只有这三个要素全部相同,才被视为同源。

CORS规范与后端处理机制

2 跨域的处理

由于实际开发中存在跨域需求,W3C组织制定了Cross-Origin Resource Sharing规范,即Cors。目前该规范已得到大多数浏览器的广泛支持,成为处理跨域问题的标准方案。

CORS需要在后端应用程序中进行配置,因此它属于一种后端处理跨域的方式。这种设计逻辑易于理解:当来自未知源的应用访问你的服务时,必须由后端应用进行授权。除了后端方案外,前端也有如JSONP等解决方案,但本文主要聚焦于Flask对CORS的配置,暂不深入探讨前端解决方案。

3 跨域的分类

跨域请求主要分为以下3种类型

名称 英文名 说明
简单请求 Simple Request 发起的Http请求符合:
1.无自定义请求头,
2.请求动词为GET、HEAD或POST之一,
3.动词为POST时,Content-Type是application/x-www-form-urlencoded,
multipart/form-data或text/plain之一
预检请求 Preflighted Request 发起的Http请求符合其中之一:
1.包含了自定义请求头,
2.请求动词不是GET、HEAD或POST,
3.动词是POST时, Content-Type不是application/x-www-form-urlencoded,
multipart/form-data或text/plain。 即:简单请求的相反
凭证请求 Requests with Credential 发起的Http请求中带有凭证

Flask中CORS的配置方法

4 Flask配置Cors

在Flask中配置CORS跨域,推荐使用Flask-CORS库。详细文档可参考: https://flask-cors.readthedocs.io/en/latest/。总体而言,flask-cors库提供了两种主要的使用方式。

方式 范围 说明
@cross_origin装饰器 配置单个路由 适用于配置特定的API接口
CORS函数 配置全局API接口 适用于全局的API接口配置

4.1 安装flask-cors


pip install flask-cors

4.2 使用@cross_origin装饰器


@app.route("/")
@cross_origin()
def helloWorld():
 return "Hello, cross-origin-world!"

装饰器参数 类型 Head字段 说明
origins 列表、字符串或正则表达式 Access-Control-Allow-Origin 配置允许跨域访问的源,
*表示全部允许
methods 列表、字符串 Access-Control-Allow-Methods 配置跨域支持的请求方式,
如:GET、POST
expose_headers 列表、字符串 Access-Control-Expose-Headers 自定义请求响应的Head信息
allow_headers 列表、字符串或正则表达式 Access-Control-Request-Headers 配置允许跨域的请求头
supports_credentials 布尔值 Access-Control-Allow-Credentials 是否允许请求发送cookie,
false是不允许
max_age 整数、字符串 Access-Control-Max-Age 预检请求的有效时长

4.3 使用CORS函数

4.3.1 应用全局配置


app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})

@app.route("/api/v1/users")
def list_users():
 return "user example"

4.3.2 单独Blueprints配置


api_v1 = Blueprint('API_v1', __name__)
CORS(api_v1) 

@api_v1.route("/api/v1/users/")
def list_users():
 return "user example"

4.3.3 CORS参数说明

参数 类型 Head字段 说明
resources 字典、迭代器或字符串 无 全局配置允许跨域的API接口
origins 列表、字符串或正则表达式 Access-Control-Allow-Origin 配置允许跨域访问的源,
*表示全部允许
methods 列表、字符串 Access-Control-Allow-Methods 配置跨域支持的请求方式,
如:GET、POST
expose_headers 列表、字符串 Access-Control-Expose-Headers 自定义请求响应的Head信息
allow_headers 列表、字符串或正则表达式 Access-Control-Request-Headers 配置允许跨域的请求头
supports_credentials 布尔值 Access-Control-Allow-Credentials 是否允许请求发送cookie,
false是不允许
max_age 整数、字符串 Access-Control-Max-Age 预检请求的有效时长

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。