flask跨域问题解决

时间在变,人也在变。所以看透世间的无常,做最好的自己,不要羡慕他人的幸福,也许那并不适合你。

问题出现
本地使用flask内置web的服务器启动服务后,使用http://ip:port/requestPath的形式请求接口,前端使用postman等其他接口测试工具可以访问成功,但是在浏览器中请求接口就会出现跨域问题。

1、跨域原因

web浏览器的同源策略原因导致跨域,浏览器出于安全考虑,在全局禁止了页面加载或执行与自身来源不同域的任何脚本,站外其他来源的脚本页面同页面的交互则被严格限制,也就是不同域之间不可以相互请求资源。

2、同源策略

同源策略是浏览器的行为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收。

同源的意思就是,web请求的接口的协议、域名、端口和web的协议、域名、端口相同,有一个不同,就会出现跨域的情况。

简单示例:

http://www.test.com:8090/path1          
http://www.test.com:8090/path1/path2                        允许访问
http://www.test.com:80/path1          
http://www.test.com:8090/path1                            端口不同,不允许访问
https://www.test.com:8090/path1          
http://www.test.com:8090/path1                            协议不同,不允许访问
http://www.good.com:8090/path1          
http://www.test.com:8090/path1                            域名不同,不允许访问
http://10.123.125.20:8090/path1          
http://www.test.com:8090/path1                            域名不同,不允许访问

3、flask服务端解决跨域问题

使用flask_cors第三方库解决,快速简单。

单个接口设置跨域访问

from flask import Flask
from flask_cors import *

app = Flask(__name__)

@app.route('/test/test_cors', methods=['POST'])
@cross_origin()
def test_cors():
    return jsonify(code=200, msg='ok')

全局设置跨域访问

from flask import Flask
from flask_cors import *

app = Flask(__name__)
CORS(app, supports_credentials=True)

@app.route('/test/test_cors', methods=['POST'])
def test_cors():
    return jsonify(code=200, msg='ok')

解决跨域的办法有很多,可以从前端和服务端解决,这里不一一介绍了,给大家推荐几个,自己可以查查以下方法。
1、ajax 的 jsonp解决(仅支持get请求)
2、 jQuery 的 jsonp解决(获取到的数据是jsonp格式)
3、本文使用的cors解决
4、nginx代理服务器解决


如果感觉本文对您有帮助可以点个赞哦

本文为学习笔记,转载请标明出处

本文仅供交流学习,请勿用于非法途径

仅是个人意见,如有想法,欢迎留言

你可能感兴趣的:(flask跨域问题解决)