1 跨域的理解

跨域是指:浏览器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 flask跨域_Flask配置Cors跨域的实现相关推荐

  1. cors跨域+php配置,CORS跨域详解

    废话少数,直接上代码!!!!!!!!!! html:html> Document var url = "http://japi.juhe.cn/tv/getCategory?key=1 ...

  2. python Flask 编写 api 接口,CORS 解决 flask 跨域问题

    为什么要编写 API 接口 flask 本身就是一个web框架,完全可以通过内嵌的方式使用python flask框架完成 web 页面的开发. 因为现在都讲究一个前后端分离,那为什么要前后端分离呢, ...

  3. tomcat7.0配置CORS(跨域资源共享)

    平时我们做前台页面时可能会遇到浏览器以下提示(浏览器控制台): 已阻止跨源请求:同源策略禁止读取位于 http://xxx.xxx.com 的远程资源.(原因:CORS 头缺少 'Access-Con ...

  4. php配置cors跨域漏洞怎么修复,CORS跨域漏洞的简单认识

    CORS CORS(Cross-origin resource sharing),又称跨域资源共享.CORS的内容不叙述,可以阅读MDN文档.或者,阅读这篇文章:跨域资源共享 CORS 详解,同时还需 ...

  5. Web API 实现JSONP或者安装配置Cors跨域

    前言 照理来说本节也应该讲Web API原理,目前已经探讨完了比较底层的Web API消息处理管道以及Web Host寄宿管道,接下来应该要触及控制器.Action方法,以及过滤器.模型绑定等等,想想 ...

  6. python flask框架教程_Flask框架从入门到实战

    Flask简介: Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎.使用 BSD 授权. Flask也被称为 " ...

  7. Flask + Nginx + React + Webpack 配置解决跨域问题

    用 Flask 做后端开发单页应用,webpack-dev-server 生成静态文件在http://localhost:8080 下,Flask 页面在 http://localhost:5000 ...

  8. SpringBoot之跨域过滤器配置允许跨域访问

    跨域请求 当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求. 出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求. 例如,XMLHttpRequ ...

  9. springboot 添加允许跨域_springboot设置cors跨域请求的两种方式

    1.第一种: public class CorsFilter extends OncePerRequestFilter { static final String ORIGIN = "Ori ...

最新文章

  1. RapidFramework使用Oracle的步骤
  2. 分享一个轻型ORM--Dapper选用理由
  3. jstree如何禁止平级拖拽?_小程序为鲜花店经营带来哪些价值?如何搭建一款鲜花小程序?...
  4. windows常用技巧
  5. leetcode1386. 安排电影院座位(贪心)
  6. pq分解法中b’怎么求_14.初中数学:二元一次方程组,加减消元法怎么解?视频有详细解题步骤...
  7. 解析vue-ssr构建流程
  8. nginx tcp代理_小猿圈linux教程之Nginx负载均衡TCP/UDP流
  9. 秋叶一键重装系统连接服务器失败,秋叶一键重装系统win7系统安装和使用DAEMONToolsLite的方法【图文教程】...
  10. 谷歌AI新进展!将静态照片生成3D动图;代码翻译与代码生成工具;C/Java/Python多种语言项目实战教程大汇总;开源知识社区软件;前沿论文 | ShowMeAI资讯日报
  11. kibana 查看有多少索引库_广州谷歌SEO优化外包一年多少钱
  12. 《谁说菜鸟不会数据分析》数据处理 之 数据清洗--重复数据的处理
  13. 《甄嬛传》计谋汇总, 本文忠实于《后宫 甄嬛传》第1本~第7本+番外原文,而非电视剧。
  14. java 异步网络编程_java网络编程实战 - 基于BIO的伪异步、高并发、全双工、长链接持续消息IO的网络编程...
  15. Android之模仿微信登陆界面(一)
  16. AXI协议详解(4)-突发传输
  17. 【宏】【DEBUG宏】
  18. 使double保留两位小数的多方法 java保留两位小数
  19. 1010: 平行四边形
  20. 教学|怎样制作360度全景图,更炫更酷3D建模步骤

热门文章

  1. sql between 效率高吗_B2增驾好吗
  2. 以 B2C 和 B2B 方式启动 SAP Spartacus 的批处理文件
  3. 如何修改Cypress 测试代码中默认的超时时间(timeout)
  4. SAP Spartacus Cost Center list的实现原理
  5. 自己动手开发SAP Spartacus focus Directive的单元测试
  6. SAP Fiori应用没能从Fiori Launchpad启动的一个可能原因及分析过程
  7. Kyma registration of webservices and event endpoints
  8. SAP CRM WebClient UI calculated fields的工作原理
  9. JSP页面和产品明细页面的绑定关系在Hybris WCMS cockpit什么地方能够找到
  10. 一个好用的基于若干静态图片生成gif图片的在线工具