Flask配置Cors跨域的实现


Posted in Python onJuly 12, 2019

1 跨域的理解

Flask配置Cors跨域的实现

跨域是指:浏览器A从服务器B获取的静态资源,包括Html、Css、Js,然后在Js中通过Ajax访问C服务器的静态资源或请求。即:浏览器A从B服务器拿的资源,资源中想访问服务器C的资源。

同源策略是指:浏览器A从服务器B获取的静态资源,包括Html、Css、Js,为了用户安全,浏览器加了限制,其中的Js通过Ajax只能访问B服务器的静态资源或请求。即:浏览器A从哪拿的资源,那资源中就只能访问哪。

同源是指:同一个请求协议(如:Http或Https)、同一个Ip、同一个端口,3个全部相同,即为同源。

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请求中带有凭证

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 相关文章推荐
在Python中使用sort()方法进行排序的简单教程
May 21 Python
python开发之基于thread线程搜索本地文件的方法
Nov 11 Python
python利用拉链法实现字典方法示例
Mar 25 Python
对python中array.sum(axis=?)的用法介绍
Jun 28 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
Python编程中flask的简介与简单使用
Dec 28 Python
Python 如何提高元组的可读性
Aug 26 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
详解python如何引用包package
Jun 07 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 Python
call在Python中改进数列的实例讲解
Dec 09 Python
python调用webservice接口的实现
Jul 12 #Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 #Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 #Python
教你如何编写、保存与运行Python程序的方法
Jul 12 #Python
如何不用安装python就能在.NET里调用Python库
Jul 12 #Python
python 执行终端/控制台命令的例子
Jul 12 #Python
python IDLE 背景以及字体大小的修改方法
Jul 12 #Python
You might like
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
详解php用static方法的原因
2018/09/12 PHP
详解PHP队列的实现
2019/03/14 PHP
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
python format 格式化输出方法
2018/07/16 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
护理专业推荐信
2013/11/07 职场文书
医院护士的求职信范文
2013/12/26 职场文书
教师个人鉴定材料
2014/02/08 职场文书
学校消防演习方案
2014/02/19 职场文书
英语故事演讲稿
2014/04/29 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
颐和园的导游词
2015/01/30 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
python opencv旋转图片的使用方法
2021/06/04 Python
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL