vue服务器代理proxyTable配置如何解决跨域

Vue是一个基于MVVM架构的前端框架,可以提高开发效率,并且易于维护和扩展。在Vue中,如果请求的资源与当前域名不一致,就会产生跨域问题。这个问题可以通过代理服务器(proxy)来解决。

在Vue中,可以通过webpack-dev-server提供的devServer配置项来配置服务器代理。

代理服务器(proxy)是指一个中间服务器,充当客户端和目标服务器之间的桥梁,客户端通过代理服务器向目标服务器发出请求,代理服务器再将请求转发给目标服务器,并将目标服务器的响应返回给客户端。在这个过程中,客户端与目标服务器之间不存在跨域问题。

接下来,我们详细讲解Vue服务器代理(proxyTable)配置的完整攻略,并提供两个示例说明。

配置方式

Vue服务器代理(proxyTable)配置的方式如下:

// vue.config.js

module.exports = {
  devServer: {
    proxy: {
      '/api': {  //请求的地址以api开头时转发到代理服务器
        target: 'http://localhost:3000',  //代理服务器地址
        changeOrigin: true,  //允许跨域
        pathRewrite: {
          '^/api': '' //url去掉前缀,仅针对api做代理
        }
      }
    }
  }
}

如上所示,我们在vue.config.js中的devServer配置中添加了proxy选项。其中,/api表示请求的地址以/api开头时,才需要转发到代理服务器。target表示代理服务器的地址,这里是http://localhost:3000changeOrigin选项设置为true,表示允许跨域。pathRewrite用于重写转发的url,这里用一个空字符串代替了/api,仅针对被代理的api做代理转发。

示例一

在一般实际项目中,我们通常把前端放在一个单独的端口,比如localhost:8080,然后把所有API请求转发到后端服务器,比如localhost:3000

假设我们要向http://localhost:3000/api/getData这个地址发送请求,由于和当前域名不同,就会遇到跨域问题。Vue服务器代理(proxyTable)可以通过如下的方式解决:

// vue.config.js

module.exports = {
  devServer: {
    proxy: {
      '/api': {  //请求的地址以api开头时转发到代理服务器
        target: 'http://localhost:3000',  //代理服务器地址
        changeOrigin: true,  //允许跨域
        pathRewrite: {
          '^/api': '' //url去掉前缀,仅针对api做代理
        }
      }
    }
  }
}

上述配置中将请求的地址以/api开头的请求转发到代理服务器http://localhost:3000,用空字符串代替了/api,请求本身并不会变,因此可以成功获取到数据,并避免了跨域问题。

示例二

假设我们需要请求一个跨域的API地址如:http://www.example.com/getData,这个API地址提供了一个post方法。

<template>
  <div>
    <button @click="getData">点击获取数据</button>
  </div>
</template>

<script>
export default {
  methods: {
    async getData() {
      try {
        const res = await axios.post('http://www.example.com/getData', {  //跨域请求
          data: 'hello world'
        })
        console.log(res.data)
      } catch (err) {
        console.error(err)
      }
    }
  }
}
</script>

由于http://www.example.com/getData和当前域名不同,会遇到如下错误提示:

Access to XMLHttpRequest at 'http://www.example.com/getData' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这个错误提示告诉我们当前域名(http://localhost:8080)无法访问http://www.example.com,因此需要Vue服务器代理(proxyTable)来处理跨域问题,配置如下:

// vue.config.js

module.exports = {
  devServer: {
    proxy: {
      '/api': {  //请求的地址以api开头时转发到代理服务器
        target: 'http://www.example.com',  //代理服务器地址
        changeOrigin: true,  //允许跨域
        pathRewrite: {
          '^/api': '' //url去掉前缀,仅针对api做代理
        }
      }
    }
  }
}

上述配置将请求的地址以/api开头的请求转发到代理服务器http://www.example.com,用空字符串代替了/api,请求本身并不会变,因此可以成功获取到跨域数据,并避免了跨域问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue服务器代理proxyTable配置如何解决跨域 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • SpringBoot项目网页加载出现Whitelabel Error Page的解决

    下面是详细讲解“SpringBoot项目网页加载出现Whitelabel Error Page的解决”的完整攻略。 问题描述 当我们使用SpringBoot框架开发Web应用时,有时会出现启动应用后访问网站出现“Whitelabel Error Page”的情况,页面显示类似于以下内容: Whitelabel Error Page This applicat…

    http 2023年5月13日
    00
  • IntelliJ IDEA报错Error:java: Compilation failed: internal java compiler error的解决办法

    IntelliJ IDEA报错Error:java: Compilation failed: internal javac compiler error的解决办法 在使用 IntelliJ IDEA 进行 Java 开发的过程中,有时会遇到这样的报错:Error:java: Compilation failed: internal javac compile…

    http 2023年5月13日
    00
  • 解决Maven 项目报错 java.httpservlet和synchronized使用方法

    以下是关于“解决Maven项目报错java.httpservlet和synchronized使用方法”的完整攻略: 问题描述 在使用Maven项目时,我们可能会遇到.httpservlet和synchronized使用方法的。这种情况通常是由于缺少相关依赖或使用方法不正确导致的。下面我们将介绍如何解决Maven项目报错java.httpservlet和syn…

    http 2023年5月13日
    00
  • 解决NDK开发中Eclipse报错Unresolved inclusion jni.h的最终解决方法(已测)

    解决NDK开发中Eclipse报错Unresolved inclusion jni.h的最终解决方法 在进行NDK开发时,经常会出现Eclipse报错提示Unresolved inclusion: <jni.h>,这是由于Eclipse无法找到jni.h头文件的位置所致。下面介绍一种最终解决该问题的方法。 步骤一:添加NDK路径到环境变量中 在W…

    http 2023年5月13日
    00
  • linux搭建gfs系统 iscsi+GFS 实现网络存储

    Linux搭建GFS系统iSCSI+GFS实现网络存储攻略 1. 安装iSCSI和GFS软件包 在Linux中,可以使用以下命令安装iSCSI和GFS软包: sudo apt-get install iscsitarget iscsitarget-dkms gfs2-utils 2. 配置iSCSI 在Linux中,可以使用以下命令配置iSCSI: sudo…

    http 2023年5月13日
    00
  • 如何避免在使用HTTP和HTTPS时出现安全问题?

    HTTP和HTTPS是网络上两个常用的协议,其中HTTPS相对更安全,因为它使用加密算法保护通信的安全性。但是,仍然有许多安全问题可能在使用这些协议时出现。下面是一些避免这些问题的攻略: 确保使用安全的加密算法 当使用HTTPS协议时,加密算法是很关键的。应该确保使用的加密算法是目前最安全和最新的,以保证通信不被攻击者窃听或篡改。例如,应该使用TLS 1.3…

    云计算 2023年4月27日
    00
  • Win10环境python3.7安装dlib模块趟过的坑

    好的。首先,需要明确一点,dlib模块对于Windows系统用户来说,安装起来相对来说比较麻烦。以下是Win10环境下python3.7安装dlib模块的攻略,具体步骤如下: 步骤一:安装CMake 在dlib官网上需要下载CMake工具。下载地址:https://cmake.org/download/。 这里选择 cmake-3.19.1-windows-…

    http 2023年5月13日
    00
  • Android Studio报错unable to access android sdk add-on list解决方案

    当 Android Studio 报错 unable to access android sdk add-on list 时,一般是由于 SDK Manager 的配置问题导致的。下面是解决方案的完整攻略。 步骤1:检查 SDK Manager 的配置 首先,打开 Android Studio 并单击顶部菜单栏中的 File > Settings。 然…

    http 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部