时间在变,人也在变。所以看透世间的无常,做最好的自己,不要羡慕他人的幸福,也许那并不适合你。
问题出现
本地使用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代理服务器解决
如果感觉本文对您有帮助可以点个赞哦
本文为学习笔记,转载请标明出处
本文仅供交流学习,请勿用于非法途径
仅是个人意见,如有想法,欢迎留言
网友评论