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根据出生年份简单计算生肖的方法
Mar 27 Python
Python第三方库的安装方法总结
Jun 06 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
python远程连接服务器MySQL数据库
Jul 02 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
Python3列表List入门知识附实例
Feb 09 Python
浅析matlab中imadjust函数
Feb 27 Python
浅谈keras 的抽象后端(from keras import backend as K)
Jun 16 Python
Python 解析xml文件的示例
Sep 29 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
PHP4与PHP5的时间格式问题
2008/02/17 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
js类型检查实现代码
2010/10/29 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
django初始化数据库的实例
2018/05/27 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
Python控制Firefox方法总结
2019/06/03 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python interpolate插值实例
2020/07/06 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
个人自我鉴定范文
2013/10/04 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技