Python学习教程:Python的cors跨域模块主要做了什么?

本文涉及的产品
.cn 域名,1个 12个月
简介: Python学习教程:Python的cors跨域模块主要做了什么?

在当下web开发环境下,前后端分离开发是一个比较主流的架构模式。那么因为不再是模板化开发,以至于前后端有可能不在一个域下(即服务器的域名是www.a.com, 客户端域名是 www.b.com),这就造成了 浏览器跨域禁止的问题。

Python学习教程:Python的cors跨域模块主要做了什么?

实际上对于前端也有很多的跨域的解决方案。那么其中一种当下也比较主流的方式是在后端开启cors。在我们python 的 web框架中, django,flask,tornado 都有各自的cors的库来处理跨域的问题。但这些cors具体做了什么呢?我们今天的Python学习教程就来跟大家剖析一下

screenshot

就像我们知道的,在一次http请求中包含有headers头信息,大家都是了解的,那么在浏览器首次通过options进行访问的会后,会由浏览器返回一些header信息来判断是否允许访问,那么在后端setheader的时候添加了一些允许信息,那么他们分别都是什么呢?我们今天给大家介绍最主要的一些键值对:

'Access-Control-Allow-Origin:' 该key是代表允许访问的域名,当前demo的value是 代表允许所有域名访问,这必然是一个不安全的,但在开发测试阶段可以这样配置,生产环境要格外注意

'Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE' 我们知道 http请求 基于restful 有一些方法 那么这里就是允许访问的方法,例如上边的post get options delete 等,如果我们去掉 get,那么将无法通过get方法访问该服务

'Access-Control-Allow-Headers:x-requested-with,content-type' 在options预处理的时候,如果服务器返回了这个响应头的信息,则会允许请求

‘Access-Control-Allow-Credentials: true’ 当设置了该key后 才能允许 cookie被传过去,否则是传不过去的。这里也是要注意的。

我们以tornado为例,在setdefaulthaders方法定义一下内容,既可以实现不需要额外安装cors库,也可以正常跨域:

上边这个例子是一个简单的demo,大家可以根据自己的业务需求再去做额外的调整。本书记也总之在于对这些header的一些了解。如果有不清楚的地方,大家也可以自行百度google,可以得到更加清晰精准的解释。

以上就是基于服务器端 对请求headers里添加的允许访问的限制参数,通过将response总进行setheaders,浏览器就知道本次请求是否允许访问。我介绍的这些也是比较常见或者说最为核心的一些跨域允许访问的键值对。希望对大家有所帮助。下期的Python学习教程,伙伴们可以期待一下!有不清楚的地方可以留言!

相关文章
|
10天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
26 5
|
12天前
|
开发框架 中间件 Java
如何处理跨域资源共享(CORS)的 OPTIONS 请求?
处理 CORS 的 OPTIONS 请求的关键是正确设置响应头,以告知浏览器是否允许跨域请求以及允许的具体条件。根据所使用的服务器端技术和框架,可以选择相应的方法来实现对 OPTIONS 请求的处理,从而确保跨域资源共享的正常进行。
|
12天前
|
JavaScript 前端开发 API
跨域资源共享(CORS)的工作原理是什么?
跨域资源共享(CORS)通过浏览器和服务器之间的这种交互机制,在保证安全性的前提下,实现了跨域资源的访问,使得不同源的网页能够合法地获取和共享服务器端的资源,为现代Web应用的开发提供了更大的灵活性和扩展性。
|
20天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
23天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
68 5
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
17 0
|
22天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
15 0
|
22天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
16 0
|
24天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy 教程之 SciPy 模块列表 13 - 单位类型。常量模块包含多种单位:公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例:`constants.zero_Celsius` 返回 273.15 开尔文,`constants.degree_Fahrenheit` 返回 0.5555555555555556。
14 0
|
8天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
下一篇
无影云桌面