什么是跨域问题
最近在做一个前后端分离的项目时,需要前端向后端发起请求然后得到数据,却始终拿不到后端返回的数据,但是通过浏览器直接访问这个接口是可以得到返回的数据。这让我百思不得其解,最后通过看报错得到了如下信息:
from flask import Flask, request, jsonify, make_responseapp=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
前端能够接收到返回的内容
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