美文网首页Vue
vue-cli3设置代理跨域详解

vue-cli3设置代理跨域详解

作者: _如图所示 | 来源:发表于2019-12-11 18:35 被阅读0次

    老规矩,先上代码

    // 在根目录下自行创建vue.config.js
    module.exports = {
      // cli3 代理是从指定的target后面开始匹配的,不是任意位置;配置pathRewrite可以做替换
      devServer: {
        port: '8080',
        open: true,
        proxy: {
          '/api': {
            // /api 的意义在于,声明axios中url已/api开头的请求都适用于该规则,
            // 注意是以/api开头,即:axios.post({url: '/api/xxx/xxx'})
            target: '服务器真实地址',
            // 此处target的意义在于:造成跨域是因为访
            // 问的host与我们的请求头里的origin不一致,所以我们要设置成一致,这个具体请看下文
            changeOrigin: true,
            pathRewrite: {'^/api': 'https://我是服务器/api'}
            // 此处是大部分文章都不会明说的的地方,
            // 既然我们设置了代理,则所有请求url都已写成/api/xxx/xxx,那请求如何知道我们到底请求的是哪个服务器的数据呢
            // 因此这里的意义在于, 以 /api开头的url请求,代理都会知道实际上应该请求那里,
            // ‘我是服务器/api’,后面的/api根据实际请求地址决定,即我的请求url:/api/test/test,被代理后请求的则是
            // https://我是服务器/api/test/test
          }
        }
      }
    }
    

    一个已经代理成功的请求

    微信图片_20191211182354.png

    如图,可以看到Request URL中的host 和 请求头中的 origin已经一致了,这就是为什么配置代理可以解决跨域的问题,
    造成跨域是因为request url的host与我们的origin不一致,也就是常说的,非同源,通过配置代理,我的请求变成了从
    192.168.1.109:8080(这是我本地的ip,解释一下)向192.168.1.109:8080请求数据,则解决了非同源的问题,

    人话模式

    人话:代理服务器代替我们请求了服务器的数据返回给了我本机,我本机向我本机请求代理替我拿到的数据,因此我不再需要考虑跨域了

    就这样

    相关文章

      网友评论

        本文标题:vue-cli3设置代理跨域详解

        本文链接:https://www.haomeiwen.com/subject/nuragctx.html