关于前后端分离的跨域问题解决方案

跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对 JavaScript实施的安全限制,当一个请求中url的协议、域名、端口与当前页面所在域中的三者中有任何一个不同,都被当作是不同的域。
跨域原理,即是通过各种方式,避开浏览器的安全限制。实际开发中,我们前端服务在一个服务器(端口),接口在另一个服务器(端口)上,这时就会产生跨域。webpack会为我们生成一个开发服务器,当我们请求开发服务器时候,通过代理就可以去请求后台接口。服务器与服务器之间是不存在跨域的说法的。只有浏览器才存在跨域的说法。

1.JSONP:现在这种用的很少了
动态创建一个script标签,只有get请求,有缓存,传递的信息大小有限制等,JSONP是从其他域中加载代码执行,若其他域不安全,会携带一些恶意的代码,有安全隐患;其次,确定JSONP的请求失败不容易。
2.iframe 跨域也比较少
3.代理跨域(前端)+nginx反向代理(后端)
这种在目前在用vue的项目中是用的比较多的,在开发中,前端在vue.config.js中文件中进行配置,具体可查看vue官网。
https://cli.vuejs.org/zh/config/#css-loaderoptions

其实我之前以为跨域前端配置了就可以了,其实只对了一半。若代码打包上线之后,就没有devServer这些东东呢,还是会产生跨域的问题,这时就需要服务端用nginx反向代理(具体细节就要请教后端开发的同学呢)实现。

module.exports = {
  // vue的配置
  devServer: {
    // 针对开发服务器的配置
    proxy: {
      "/api": {
        // 当请求路径以 /api 开头时,开发服务器需要代理到 http://study.work.com
        //若是 /api/user/login  --->,则代理到   http://study.work.com/api/user/login
        target: "http://study.work.com",
      },
    },
  },
};

4.CORS
1.若允许所有的源访问,服务端设置 Access-Control-Allow-Origin 为 “*”,
这时Access-Control-Allow-Credentials为false,否则会报错。
前端无须设置。
2.若要带 cookie 请求,前后端都需要设置。前端需要加一句代码,即允许请求时携带资源凭证。其他设置和正常的axios请求一样。该怎么设置就怎么设置。

 import axios from 'axios'
 // 注意下面这句话一定要加上
 axios.defaults.withCredentials= true;

剩余的工作就是由服务器端去完成了。一般服务器需要指定允许源。
即Access-Control-Allow-Origin :“指定源”, Access-Control-Allow-Credentials:true。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值