广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何使用proxytable配置解决vue-cli的跨域请求问题
  • 378
分享到

如何使用proxytable配置解决vue-cli的跨域请求问题

2024-04-02 19:04:59 378人浏览 安东尼
摘要

小编给大家分享一下如何使用proxytable配置解决Vue-cli的跨域请求问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

小编给大家分享一下如何使用proxytable配置解决Vue-cli的跨域请求问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

本文适用人群:

  • 会使用 vue-cli 搭建一个基本的 vue webpack 项目,本文的目录结构基于 WEBpack 模板结构

  • 懂得 axiOS 基本用法

问题导向

日常开发中,前端经常需要通过 ajax后端获取数据。而在这种前后端分离的开发模式下,往往前端项目与后端项目的 IP地址、端口号、协议 大概率是不一样的,由于浏览器的安全策略设定,不进行相应配置的话,前端的请求就会被浏览器拦截掉啦。

假设某个页面组件在加载的时候会向后端发送一个请求,然后根据返回的结果来渲染页面。代码示例如下:

前端项目通过 npm run dev 运行在 localhost:8081 上,

后端项目通过 apache 运行在 localhost/test/public/api/books

<template>
 <div class="hello">
 <ul>
  <li v-for="book of books">{{book.name}}</li>
 </ul>
 </div>
</template>
<script>
 import axios from 'axios';
 export default {
 name: 'HelloWorld',
 data() {
  return {
  books: []
  }
 },
 created(){
  let self = this;
  axios.get("Http://localhost/test/public/api/books")
  .then((response)=>{
  self.books = response.data;
  });
 }
 }
</script>

直接访问后端链接,将能得到以下返回内容:

[
 {"name":"javascript \u4ece\u5165\u95e8\u5230\u653e\u5f03"},
 {"name":"\u9888\u690e\u75c5\u5eb7\u590d\u6307\u5357"},
 {"name":"\u89c6\u529b\u4fdd\u62a4\u6307\u5357"}
]

但是当我们在浏览器中运行前端页面,会报错!控制台打印如下:

如何使用proxytable配置解决vue-cli的跨域请求问题 

可见,浏览器对于跨域访问进行了限制,因为在例子中前端项目url与后端项目url的端口号不相同,所以浏览器拦截了我们的请求。

解决方案

解决方式有很多种,包括可以很简单粗暴地让后端代码设置一个 Access-Control-Allow-Origin 头来解决这个问题。但是,在实际开发中,后端的小哥哥们才不会理会你这个羞耻的小请求呢~

那怎么办咧~

其实我们可以通过配置 vue 项目中的 config/index.js 来解决问题。

将 dev 中的 proxyTable 改为如下:

proxyTable: {
 '/api': {
 target: 'http://localhost/test/public/api/',
 changeOrigin: true,
 pathRewrite: {
  '^/api': ''
 }
 }
},

接着,再将 vue 组件页面中的 ajax 请求代码改为如下:

// 改为这样,原来是这样:axios.get("http://localhost/test/public/api/books")
axios.get("/api/books")

重新运行 npm run dev ,运行效果如下:

如何使用proxytable配置解决vue-cli的跨域请求问题 

当当当!成功!

为什么这么做?

当我们打开浏览器的开发者工具查看一下网络请求就会发现,这个 ajax 请求竟然是向我们前端的 webpack-dev-server 发送的:

如何使用proxytable配置解决vue-cli的跨域请求问题 

而且居然能返回正确的数据???

浏览器有安全策略限制,但是第三方的服务(服务器)没有呀,所以我们可以通过让浏览器访问前端开发服务器的url,让前端开发服务器去向后端服务器发送请求,再返回数据给浏览器,这样子就不存在跨域问题啦。

如何使用proxytable配置解决vue-cli的跨域请求问题 

当我们在配置中这么写时:

proxyTable: {
 '/api': {
 target: 'http://localhost/test/public/api/',
 }
},

对于8081端口的开发服务器而言,所有以 /api 开头的 uri 都会被转发到 http://localhost/test/public/api/ ,

也就是说,在浏览器中访问 localhost:8081/api/books ,前端开发服务器就会向 http://localhost/test/public/api/api/books 请求数据。就是简单粗暴地在 target 之后拼接上当前的uri。

会发现这样子做,实际的 url 中多了一个 /api ,不满足我们的需求,所以可以通过 pathRewrite 将这几个字符串替换掉。

// 将 "/api" 开头的 url 中的 "api" 替换成 空
proxyTable: {
 '/api': {
 target: 'http://localhost/test/public/api/',
 pathRewrite: {
  '^/api': ''
 }
 }
},
// 根据上面的规则
// 当在浏览器访问 localhost:8081/api/books
// 则实际访问的是 http://localhost/test/public/api/books
// 假设设置成 
pathRewrite: {'^/api': '/somethingnew'}
// 当在浏览器访问 localhost:8081/api/books
// 则实际访问的是 http://localhost/test/public/somethingnew/books

而配置项 changeOrigin: true 则是设置了前端开发服务器向后端发送请求时 HTTP 包中的 HOST 字段。当设置为 true 时,HOST 会被设置成目标地址(target)中的主机。当后端服务器是虚拟主机时,这个选项显得尤为重要,或者说,同一个IP绑定了多个服务器服务时显得尤为重要。不设置的话,可能会导致请求不到数据。

如何使用proxytable配置解决vue-cli的跨域请求问题

以上是“如何使用proxytable配置解决vue-cli的跨域请求问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: 如何使用proxytable配置解决vue-cli的跨域请求问题

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用proxytable配置解决vue-cli的跨域请求问题
    小编给大家分享一下如何使用proxytable配置解决vue-cli的跨域请求问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!...
    99+
    2022-10-19
  • Vue-cli proxyTable如何解决开发环境的跨域问题
    小编给大家分享一下Vue-cli proxyTable如何解决开发环境的跨域问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!和...
    99+
    2022-10-19
  • vue服务器代理proxyTable配置如何解决跨域
    目录服务器代理proxyTable配置解决跨域1、Proxy代理作用2、常见情况3、应用方式4、具体配置实例 5、配置思路Vue.proxyTable是什么?为什么会有pr...
    99+
    2022-11-13
  • vue如何解决axios请求前端跨域问题
    目录前言一、为什么会出现跨域的问题?二、解决方案跨域资源共享(CORS)写在最后前言 最近在写纯前端的vue项目的时候,碰到了axios请求本机的资源的时候,出现了访问报404的问...
    99+
    2022-11-12
  • Vue-Cli配置代理转发解决跨域问题的方法
    目录vue-cli中集成的跨域解决方案vue-cli解决跨域配置说明基地址重启项目,验证结果小结vue-cli中集成的跨域解决方案 思路: 在前端服务和后端接口服务之间 架设一个中...
    99+
    2022-11-13
  • vue2.0如何设置proxyTable使用axios进行跨域请求
    小编给大家分享一下vue2.0如何设置proxyTable使用axios进行跨域请求,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧...
    99+
    2022-10-19
  • 如何解决Ajax请求跨域问题
    这期内容当中小编将会给大家带来有关如何解决Ajax请求跨域问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、解决方案:1,在服务器端的响应头中添加一个http参数:res.setHeader(&quo...
    99+
    2023-06-08
  • 【Vue.js】Vue3全局配置Axios并解决跨域请求问题
    系列文章目录 文章目录 系列文章目录背景一、部署Axios1. npm 安装 axios2. 创建 request.js,创建axios实例3. 在main.js中全局注册axios4. 在页面中使用axios 二、后端解决跨...
    99+
    2023-12-23
    vue.js 前端 javascript
  • 解决vue $http的get和post请求跨域问题
    vue $http的get和post请求跨域问题 首先在config/index.js中配置proxyTable proxyTable: { '/api':{ ...
    99+
    2022-11-12
  • 如何解决Ajax请求WebService跨域问题
    这篇文章主要介绍如何解决Ajax请求WebService跨域问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、背景  用Jquery中Ajax方式在asp.net开发环境中Web...
    99+
    2022-10-19
  • springboot 如何解决cross跨域请求的问题
    目录springboot 解决cross跨域请求1.使用ajax发送跨域请求接口时2.在被跨域请求的一方配置3.再次测试4.对于只有个别需要开放跨域请求的接口可以这样玩5.其它解决跨...
    99+
    2022-11-12
  • vue如何解决axios请求出现前端跨域问题
    本篇内容主要讲解“vue如何解决axios请求出现前端跨域问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue如何解决axios请求出现前端跨域问题”吧!在...
    99+
    2022-10-19
  • 如何解决vue中$http的get和post请求跨域问题
    这篇文章给大家分享的是有关如何解决vue中$http的get和post请求跨域问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。vue $http的get和post请求跨域问题首先在config/index.js...
    99+
    2023-06-15
  • 如何解决vue-cli开发环境跨域的问题
    小编给大家分享一下如何解决vue-cli开发环境跨域的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前后端分离开发中必要会遇...
    99+
    2022-10-19
  • 使用Flask和Django中解决跨域请求问题
    Flask解决跨域 1、下载flask_cors包 pip install flask-cors 2、使用flask_cors的CORS 代码示例 from flask_c...
    99+
    2022-11-12
  • 如何使用AngularJS跨站请求解决jsonp请求问题
    这篇文章将为大家详细讲解有关如何使用AngularJS跨站请求解决jsonp请求问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。这是我的请求:我在浏览器模板赋值的时候发...
    99+
    2022-10-19
  • vue项目配置代理如何解决跨域问题
    目录Vue项目配置代理1. 这里以axios发请求为例2. 如果发送的请求都以 /abc 开头3. 代理多个接口什么是跨域?配置(vue.config.js)总结Vue项目配置代理 ...
    99+
    2023-01-28
    vue项目配置代理 vue跨域 vue配置代理
  • vue-cli开发时如何解决关于ajax跨域的问题
    这篇文章主要介绍vue-cli开发时如何解决关于ajax跨域的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!目的:使用vue-cli构建的项目,在开发时,想要访问后台接口获取数据...
    99+
    2022-10-19
  • ajax跨域请求js拒绝访问的问题如何解决
    本篇内容介绍了“ajax跨域请求js拒绝访问的问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • 怎么用iframe设置代理解决ajax跨域请求问题
    本篇内容介绍了“怎么用iframe设置代理解决ajax跨域请求问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作