美文网首页
flask跨域问题解决

flask跨域问题解决

作者: 写给明天的自己 | 来源:发表于2022-01-11 15:53 被阅读0次

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

    问题出现
    本地使用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跨域问题解决

          本文链接:https://www.haomeiwen.com/subject/dedbcrtx.html