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 其中可能有银行网站等等。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值