返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue项目配置代理如何解决跨域问题
  • 890
分享到

vue项目配置代理如何解决跨域问题

vue项目配置代理vue跨域vue配置代理 2023-01-28 06:01:25 890人浏览 安东尼
摘要

目录Vue项目配置代理1. 这里以axiOS发请求为例2. 如果发送的请求都以 /abc 开头3. 代理多个接口什么是跨域?配置(vue.config.js)总结Vue项目配置代理

Vue项目配置代理

前端服务器发送请求时,经常会遇到跨域问题,那么什么是前端跨域呢?

在vue项目中如何利用代理解决呢?

1. 这里以axios发请求为例

axios.get("/abc/def");
axios.get("/abc/ghi");
axios.post("/abc/jkm");

axios发送的请求是本地的服务器地址拼接上发送的请求,如 Http://localhost:8080/abc/def

2. 如果发送的请求都以 /abc 开头

那么我们就可以在proxy中进行服务器代理配置。

devServer: {
    proxy: {
      "/abc": {
        target: "http://XX.XX.XX.XX:8081",
        changeOrigin: true,
        ws: true,
        secure: false,
      },
    },
},

"/abc":{} : 引号中代表监测的是以 /abc 开头的接口

target : 代表监测到以 /abc 开头的接口后,把axios请求中前面的本地服务器地址改为后端接口地址,实际发送给后端的请求就是下方后一个请求

http://localhost:8080/abc/def --> http://XX.XX.XX.XX:8081/abc/def

  • changeOrigin : 是否跨域
  • ws : 如果要代理 websockets,配置这个参数
  • secure : 如果是https接口,需要配置这个参数(如果是http接口,也可以不写这个参数)
  • pathRewrite :替换请求中匹配的内容。在3的方法2中详细解释用法,上方未使用此参数

3. 代理多个接口

http://localhost:8080/zzz/one

http://localhost:8080/xxx/two

方法1:监测多个接口,可以在proxy中写多个配置:(适用于target不同的代理,相同也可以用这个方法,就是会麻烦一点,对于相同的target方法2会比较方便)

devServer: {
    proxy: {
        "/zzz": {
          target: "http://XX.XX.XX.XX:8082",
          changeOrigin: true,
          ws: true,
        },
        "/xxx": {
          target: "http://XX.XX.XX.XX:8083",
          changeOrigin: true,
          ws: true,
        },
    },
},

那么实际发送给后端的请求就是:

http://XX.XX.XX.XX:8082/zzz/one

http://XX.XX.XX.XX:8083/xxx/two

方法2:使用axios进行前设置(适用于target相同的代理)

// 一般在全局设置里引入,例如main.js,方便第二行的配置被每一个axios请求识别
import axios from "axios";
// 只要发送axios请求,就在请求前加入/api的开头,例如 /zzz/one -> /api/zzz/one
axios.defaults.baseURL = "/api";    

进行了上方的配置后,在本地发送的请求会变为

http://localhost:8080/api/zzz/one

http://localhost:8080/api/xxx/two

而后可以设置只监听 "/api" 的代理,不过要设置pathRewrite参数:

devServer: {
    proxy: {
        "/api": {
            target: "http://XX.XX.XX.XX:8084",
            changeOrigin: true,
            ws: true,
            pathRewrite: {
              "^/api": "",
            },
        },
    },
},

pathRewrite :检查代理的请求中是否有 /api ,有的话把 /api 替换为冒号后面的内容,案例为替换成空字符串,也就是删去 /api 。(^是正则表达式的内容,意思是限定开头)

  • 本地请求 http://localhost:8080/api/zzz/one -> 
  • 代理后请求 http://XX.XX.XX.XX:8084/api/zzz/one ->
  • 设置pathRewrite后的请求 http://XX.XX.XX.XX:8084/zzz/one
  • 所以代理完成后真正发送给后端的请求就是 http://XX.XX.XX.XX:8084/zzz/one 啦。

1.统一给请求添加/api方便监测代理 2.统一删去/api发送正确的请求)

  • 注意:小伙伴们可能会看到浏览器中右键检查打开的控制台中,网络->标头->常规,中的请求网址显示的还是 http://XX.XX.XX.XX:8084/api/zzz/one 。
  • 这是因为浏览器的同源策略,经过代理设置的请求发送给后端已经变成 http://XX.XX.XX.XX:8084/zzz/one 没有/api 的形式了,不用被浏览器显示的请求网址干扰。
  • 如果实在不想看到浏览器的请求网址中有api,可以采用方法1。

什么是跨域?

javascript同源策略:当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。

不同域之间相互请求资源,就算作“跨域”。

同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。**同源策略限制:**表单提交、ajax请求等。

注意:跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。

proxy代理解决跨域

 **原理:**浏览器是禁止跨域的,但是服务端不禁止,在本地运行npm run serve等命令时实际上是用node运行了一个服务器,因此proxyTable实际上是将请求发给自己的服务器,再由服务器转发给后台服务器,做了一层代理,因此不会出现跨域问题。

当我们在用本机去找服务器要数据时会产生跨域问题,所以利用vue-cli去开启一个代理服务器。

配置(vue.config.js)

方法一

优点:配置简单、请求资源时直接发给前端(8080)即可

缺点:不能配置多个代理,不能灵活的控制请求是否走代理

当请求了前端不存在的资源时,该请求会转发给服务器(优先匹配前端资源)

 module.exports = {
     devServer: {
             proxy: 'http://localhost:5000',
     }
 }

方法二

优点:可以配置多个代理,且可以灵活的控制请求是否走请求

缺点:配置繁琐,请求资源时必须加前缀

//开启代理服务器(方法二)
    devServer: {
        proxy: {
            //  '/yu'为请求前缀,用于控制是不是走代理,想走代理时就在请求前缀前边加上这个请求前缀
            '/yu': {
                target: 'http://localhost:5000',
                pathRewrite: { "^/yu": "" }, //重写路径  匹配以/yu为开头的路径都变为空字符串 
                ws: true, //用于支持WEBSocket
                changeOrigin: true //用于控制请求头中的host值
            },
            '/demo': {
                target: 'http://localhost:5001',
                pathRewrite: { "^/demo": "" },
                ws: true, //用于支持websocket
                changeOrigin: true //用于控制请求头中的host值
            },
        }
    }

请求时:

请求前缀必须跟着端口号

getStudents() {
      axios.get("http://localhost:8081/yu/students").then(
        (response) => {
          console.log("请求成功了", response.data);
        },
        (error) => {
          console.log("请求失败了", error.message);
        }
      );
    },
    getCars() {
      axios.get("http://localhost:8081/demo/cars").then(
        (response) => {
          console.log("请求成功了", response.data);
        },
        (error) => {
          console.log("请求失败了", error.message);
        }
      );
    },

1.vue-cli 2 是在路径为config/index.js的文件下proxyTable里配置的,该文件是整个项目的主要配置入口

// node自带路径工具.
var path = require('path')
// 分为两种环境,dev和production
module.exports = {
  dev: {
    // 配置好后一定要关闭原来的server,重新npm run dev启动项目。不然无效。
    proxyTable: {   // 需要代理的接口,可以跨域
      // 用‘/api'开头,代理所有请求到目标服务器
      '/api': {
            target: 'http:xxx.com', // 目标接口域名
            changeOrigin: true, // 是否启用跨域
            pathRewrite: { //这里要理解成用'/api'代替target里面的地址,后面的组件中我们调用接口的时候直接用api代替,比如我要调用'http://40.00.100:3002/user/add',直接写成'/api/user/add'即可
              '^/api': ''  // 即/api相当于http://40.00.100:3002
            }
        }
     }
  }
}

注意:‘/api’ 为匹配项,因为在 ajax 的 url 中加了前缀 ‘/api’,而原本的接口是没有这个前缀的,所以需要通过 pathRewrite 来重写地址,将前缀 ‘/api’ 转为 ‘/’。

如果本身的接口地址就有 ‘/api’ 这种通用前缀,就可以把 pathRewrite 删掉。

2.vue-cli 3 是自己在根目录下新建vue.config.js文件,在devServer.proxy对象里配置(当然也有其他方式),配置后会和隐藏的配置自动进行整合

module.exports = {
    // cli3 代理是从指定的target后面开始匹配的,不是任意位置;配置pathRewrite可以做替换
    devServer: {
      proxy: {
        '/yourapi': {   //代理api,/yourapi的意义在于,声明axios中url已/api开头的请求都适用于该规则,注意是以/yourapi开头,即:axios.post({url: '/yourapi/xxx/xxx'})
          target: 'yourserver',   //服务器真实api地址,即需要请求的目标接口,此处target的意义在于:造成跨域是因为访问的host与我们的请求头里的origin不一致,所以我们要设置成一致,这个具体请看下文
          changeOrigin: true,    //是否跨域,true为开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
          ws: true, // 是否启用websockets,根据实际情况看是否需要配置该项
          pathRewrite: { 
               '^/yourapi': 'https://我是服务器/api'   //重写路径
        // 此处是大部分文章都不会明说的的地方,
        // 既然我们设置了代理,则所有请求url都已写成/yourapi/xxx/xxx,那请求如何知道我们到底请求的是哪个服务器的数据呢
        // 因此这里的意义在于, 以 /yourapi开头的url请求,代理都会知道实际上应该请求那里,
        // ‘我是服务器/yourapi',后面的/api根据实际请求地址决定,即我的请求url:/yourapi/test/test,被代理后请求的则是
        // https://我是服务器/yourapi/test/test
          } 
        }
      }
    }
  }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: vue项目配置代理如何解决跨域问题

本文链接: https://lsjlt.com/news/178314.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vue项目配置代理如何解决跨域问题
    目录Vue项目配置代理1. 这里以axios发请求为例2. 如果发送的请求都以 /abc 开头3. 代理多个接口什么是跨域?配置(vue.config.js)总结Vue项目配置代理 ...
    99+
    2023-01-28
    vue项目配置代理 vue跨域 vue配置代理
  • vue项目实现webpack配置代理,解决跨域问题
    目录webpack配置代理,解决跨域主要是这句话vue跨域问题,修改代理后仍404接口请求用法webpack配置代理,解决跨域 在config文件夹中的index.js文件配置 主要...
    99+
    2024-04-02
  • Vue项目中该如何解决跨域问题
    目录跨域同源策略express服务器vue处理跨域express处理跨域总结跨域 跨域报错是前端开发中非常经典的一个错误,报错如下  Access to XMLHttpRe...
    99+
    2024-04-02
  • 解决vue项目中前后端交互的跨域问题、nginx代理配置方式
    目录vue前后端交互的跨域问题、nginx代理配置1.安装axios2.解决跨域问题前后端分离项目的跨域问题及解决跨域简述解决办法vue前后端交互的跨域问题、nginx代理配置 最近...
    99+
    2024-04-02
  • 前端vue打包项目,如何解决跨域问题
    目录vue打包项目解决跨域vue项目解决跨域(打包上线无需手动切换url)vue打包项目解决跨域 前段时间做一个vue打包成安卓和IOS的App,遇到了跨域问题,直接拿了之前项目的配...
    99+
    2024-04-02
  • Vue项目中怎么解决跨域问题
    本篇内容主要讲解“Vue项目中怎么解决跨域问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue项目中怎么解决跨域问题”吧!跨域跨域报错是前端开发中非常经典的一个错误,报错如下 Ac...
    99+
    2023-07-02
  • vue如何配置跨域代理
    这篇文章主要介绍了vue如何配置跨域代理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。导语:首先,每一个前端开发人员都应该知道同源策略,同源...
    99+
    2024-04-02
  • Nginx配置反向代理解决跨域问题
    通过Nginx配置反向代理结果跨域问题 第一步:下载Nginx 一、下载 官网下载地址:http://nginx.org/en/download.html 我下载的版本:http://nginx.or...
    99+
    2023-09-06
    nginx 服务器 运维
  • vue项目部署跨域问题怎么解决
    这篇文章主要介绍“vue项目部署跨域问题怎么解决”,在日常操作中,相信很多人在vue项目部署跨域问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue项目部署跨域问题怎么解决”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Vue-Cli配置代理转发解决跨域问题的方法
    目录vue-cli中集成的跨域解决方案vue-cli解决跨域配置说明基地址重启项目,验证结果小结vue-cli中集成的跨域解决方案 思路: 在前端服务和后端接口服务之间 架设一个中...
    99+
    2024-04-02
  • VUE如何解决跨域问题
    这篇文章主要介绍“VUE如何解决跨域问题”,在日常操作中,相信很多人在VUE如何解决跨域问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VUE如何解决跨域问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-02
  • Vite怎么配置代理Proxy解决跨域问题
    本篇内容主要讲解“Vite怎么配置代理Proxy解决跨域问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vite怎么配置代理Proxy解决跨域问题”吧!前言我们在编写前端项目的时候,经常会遇到...
    99+
    2023-07-05
  • vue如何使用反向代理解决跨域问题
    这篇文章主要讲解了“vue如何使用反向代理解决跨域问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何使用反向代理解决跨域问题”吧!为什么要解决跨域问题因为浏览器有限制,只有同域名同...
    99+
    2023-07-04
  • vue跨域处理方式(vue项目中baseUrl设置问题)
    目录vue跨域处理(baseUrl设置问题)一、方法一二、方法二三、方法三vue请求不同的域名,baseURL配置vue跨域处理(baseUrl设置问题) 一、方法一 在公用文件...
    99+
    2024-04-02
  • vue服务器代理proxyTable配置如何解决跨域
    目录服务器代理proxyTable配置解决跨域1、Proxy代理作用2、常见情况3、应用方式4、具体配置实例 5、配置思路Vue.proxyTable是什么?为什么会有pr...
    99+
    2024-04-02
  • vue怎么解决代理和跨域问题
    这篇“vue怎么解决代理和跨域问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue怎么解决代理和跨域问题”文章吧。一、安...
    99+
    2023-07-04
  • 如何解决Django+vue跨域问题
    小编给大家分享一下如何解决Django+vue跨域问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!跨域由于开发模式为前后端分离...
    99+
    2024-04-02
  • vue-cli3跨域问题如何解决
    本篇内容介绍了“vue-cli3跨域问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1:将任何未知请求转发到代理服务器如:前端地址...
    99+
    2023-07-04
  • Vue如何解决跨域问题详解
    什么是跨域 跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据。源指协议,端口,域名。只要这个3个中有一个不同就是跨域。 这里列举一个经典的列子: #协议跨域http://a....
    99+
    2024-04-02
  • vue跨域proxy代理配置详解
    目录引言例一例二总结引言 相信很多人都用过proxy,这里就不多说proxy的基本使用,这里要说一下很多人使用proxy的一个误区,大家一般都是直接将管官方的例子拿过来,修改一下代理...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作