前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库|Flask解决跨域问题

数据库|Flask解决跨域问题

作者头像
算法与编程之美
发布2020-05-25 17:03:40
1.1K0
发布2020-05-25 17:03:40
举报

什么是跨域问题

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

通过百度知道这是因为浏览器的同源策略规定某域下的客户端在没明确授权的情况下,不能

读写另一个域的资源。而在实际开发中,前后端常常是相互分离的,并且前后端的项目部署也常常不在一个服务器内或者在一个服务器的不同端口下。前端想要获取后端的数据,就必须发起请求,如果不做一些处理,就会受到浏览器同源策略的约束。后端可以收到请求并返回数据,但是前端无法收到数据。

解决办法

方案1 使用make_response

具体代码如下

代码语言:javascript
复制
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

代码语言:javascript
复制

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

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

END

主 编 | 王文星

责 编 | 刘玉江

where2go 团队

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档