前后端分离以及session如何处理?跨域怎么办?

说明

前一阵子,用vue+springboot相关的项目,今天来说一下免得忘记,关于session和cookie的基本知识,参考之前的文章 直接借用一张图,说白了之前前后端都是一个运用现在变成两个了,功能明确,易于扩展。前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务; 核心:前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互

首先弄明白session从哪里来?

其次搞明白跨域怎么回事?

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。 注意是浏览器搞的鬼 那么不跨域条件是什么? 同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;

假设有两个网站,A网站部署在:http://localhost:81 即本地ip端口81上;B网站部署在:http://localhost:82 即本地ip端口82上。现在A网站的页面想去访问B网站的信息,这时不满足t同源策略会跨域

分离后存在的问题?

首先就是session的问题

    后台运行可能多个实例这时一个运用登陆了,但是下次请求负载到另外一台了,这时session不存在,需要重新登陆,那么如何解决? 大家可参考之前的文章来解决这个问题 前台用了vue如何将cookie中信息带到后台让它找到对应的session? 因为用了vue的axios我们在发送请求时需要设置withCredentials=true;
this.$axios.post(http://localhost:8080/test/xxx/xxxx, {}, {
              headers: {
                "Content-Type":"application/json;charset=utf-8"
              },
              withCredentials : true
          }).then(function(response) {
              // 这里是处理正确的回调
              let result = response.data.result;
              if (0 == result) {
                self.menulist = response.data.item.menulist;
              } else if (11 == result || 9 == result) {
                self.$router.push(/login);
              } else {
                console.log(response.data);
              }

          }).catch( function(response) {
              // 这里是处理错误的回调
              console.log(response)
          });
          以上两个条件缺一不可特别是在分布式多实例的情况下!

其次就是跨域问题

在这如何最大化利用前后端分离的优势?

    答案是必须的,但最核心的是使用mock数据,前后大虾们定好数据格式,之后便各自开发,然后后台运用swagger进行调式即可,效率会快很多
经验分享 程序员 微信小程序 职场和发展