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中获取网页状态码的两个方法
Nov 03 Python
使用Python发送各种形式的邮件的方法汇总
Nov 09 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
Python处理CSV与List的转换方法
Apr 19 Python
学生信息管理系统python版
Oct 17 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
Aug 09 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
python如何调用java类
Jul 05 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
PHP个人网站架设连环讲(二)
2006/10/09 PHP
php实现查询百度google收录情况(示例代码)
2013/08/02 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
基于jquery的Repeater实现代码
2010/07/17 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
python实现动态创建类的方法分析
2019/06/25 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
python tkinter窗口最大化的实现
2019/07/15 Python
为什么是 Python -m
2020/06/19 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
采购部主管岗位职责
2014/01/01 职场文书
报关专员求职信范文
2014/02/22 职场文书
食品安全工作实施方案
2014/03/26 职场文书
个人向公司借款协议书
2016/03/19 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书