Flask解决跨域问题

Flask解决跨域问题

什么是跨域问题


最近在做一个前后端分离的项目时,需要前端向后端发起请求然后得到数据,却始终拿不到后端返回的数据,但是通过浏览器直接访问这个接口是可以得到返回的数据。这让我百思不得其解,最后通过看报错得到了如下信息

通过百度知道这是因为浏览器的同源策略规定某域下的客户端在没明确授权的情况下,不能读写另一个域的资源。而在实际开发中,前后端常常是相互分离的,并且前后端的项目部署也常常不在一个服务器内或者在一个服务器的不同端口下。前端想要获取后端的数据,就必须发起请求,如果不做一些处理,就会受到浏览器同源策略的约束。后端可以收到请求并返回数据,但是前端无法收到数据。

解决办法

方案1 使用make_response

具体代码如下

from flask import Flask, request, jsonify, make_response

app=Flask(__name__)

@app.route('/')

def index():

    user_count = User.query.count()

    data = request.args.to_dict()

    user_list = User.query.order_by(

        User.id.asc()

    ).paginate(page=int(data.get('page')),per_page=int(data.get('limit')))

    res = make_response(jsonify(

        {"code":0,

         "msg":'',

         "count":user_count,

         "data":[{"id":user.id,"username":user.username,"password":user.password} for user in user_list.items]

         }

    ))

    res.headers['Access-Control-Allow-Origin'] = '*'

    res.headers['Access-Control-Allow-Method'] = '*'

    res.headers['Access-Control-Allow-Headers'] = '*'

    return res


    前端能够接收到返回的内容

 

方案2 使用CROS

首先安装flask_cors这个包 pip install flask_cors

from flask_cors import *

app = Flask(__name__)

CORS(app, supports_credentials=True)

 

@app.route('/')

def index():

    user_count = User.query.count()

    data = request.args.to_dict()

    user_list = User.query.order_by(

        User.id.asc()

    ).paginate(page=int(data.get('page')),per_page=int(data.get('limit')))

    return jsonify(

        {"code":0,

         "msg":'',

         "count":user_count,

         "data":[{"id":user.id,"username":user.username,"password":user.password} for user in user_list.items]

         }

    )

总结

之所以浏览器要制定同源策略,其中一个重要的原因就是对cookie的保护。Cookie中存着sessionid,如果黑客获取了sessionid,在有效的时间内就能登录我们的账号。当我们访问了一个恶意网站 如果没有同源策略 那么这个网站就能通过js 访问document.cookie 得到用户关于的各个网站的sessionID 其中可能有银行网站等等。

虽然有同源策略,但是不是说就绝对安全,只能说是提高了一点攻击的成本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐