学习Vue配置代理总结

今天学习了Vue的配置代理,当我们想要向服务器取回来数据时就先要向服务器发送请求,但前端发送请求的方式也有很多种,首先是发送请求的鼻祖JS的XMLHttpRequest(xhr),它操作起来相对麻烦,开发中也比较少用。第二个就是xhr的替代品fetch,直接调用即可它同样是JS内置的,但取数据也比较繁琐,还有一个致命的缺点就是兼容性差(IE浏览器无法使用)。还有其他方法就是借助第三方库,比如jQuery它封装了xhr,但这个库的主要作用是封装DOM操作,缺点是自身的体积比较大。最后要介绍的是Vue官方都推荐发请求使用的axios这个第三方库,重点axios是Peomise风格的,不但可以发送xhr请求,还支持请求和响应拦截器,它更专注于发请求的功能,所以它的体积差不多只有jQuery的四分之一大。

有了发送请求接下来要解决的就是在不同域中的资源交互(俗称:跨域),这里涉及到一个浏览器的安全功能叫同源决策,简单点理解就是我们浏览器的协议、主机名、端口号要和请求服务器的这三个完全相同才被认为是同源,只有这样才能获取到服务器上的资源,否则不行。

解决跨域问题也有几种方法,第一种是cors,服务器响应时配置特殊的响应头从而浏览器可以拿到数据,缺点是任何人都可以找该服务器取数据,但这是完全由服务器后端解决的跨域问题(前端就不考虑了)。第二种是jsonp库,巧妙使用了script标签里面的src属性引入外部数据不受同源策略限制的特点办到的,但缺点是需要前后端的配合,还有它只能解决get跨域的问题其他的解决不了。最后一种就是本章要说的重点:代理服务器,这完全是由前端操作完成的,让前端向代理服务器发请求,然后代理服务器再和服务器打交道,这样服务器跟服务器之间通过http传输(绕过跨域限制)。

接下来说第一种开启和使用代理服务器的方法。

按以上操作复制代码到Vue脚手架中的vue.config.js配置文件中,将端口号(4000)改为要请求的服务器的端口号,这样就开启了一台代理服务器。然后在终端通过npm i axios命令下载axios,再从需要发送请求的组件中使用import axios from ‘axios’将axios引入使用。

如上图所示,浏览器发送请求的地址为代理服务器的地址(相同的),不过要在端口后携带请求数据的路径,比如:'http://localhost:8080/students',这样就收到了服务器响应回来的数据了,这种方法开启的代理服务器有两个缺点,第一个是不能配置多个代理(只能像一个服务器发送请求),第二个是不能灵活的控制请求是否走代理(当请求的资源8080本身就有时,则直接取本地的,代理也不会将请求发出)。

第二种开启代理服务器的方法,首先到官网刚才第一种方法的位置向下滚动一点就可以看到一下代码块,同样复制到代码到Vue脚手架中的vue.config.js配置文件中,下面一同介绍代码块的具体配置规则。

module.exports = {devServer: {proxy: {'/api1': { //匹配所有以'/api1'开头的请求路径target: 'http://localhost:5000', //代理目标的基础路径changOrigin: true, //用于控制请求头中的host值pathRewrite:{'^/api1': ''}, //重写路径ws: true //用于支持websocket},'/api2': { //匹配所有以'/api2'开头的请求路径target: 'http://localhost:5001', //代理目标的基础路径changOrigin: true, //用于控制请求头中的host值pathRewrite:{'^/api2': ''}, //重写路径ws: true //用于支持websocket}}}
}
/*changeOrigin设置为true时,服务器收到的请求头中的host为:localhost:5000changeOrigin设置为false时,服务器收到的请求头中的host为:localhost:8080changeOrigin默认值为true
*/

重点说一下pathRewrite重新路径,当配置多个代理时,浏览器发请求给代理则需要带着开头路径比如:api1,这时配置一个pathRewrite(对象形式,左边的key值写正则表达式,右边value值将替换掉前面的左边的值再生成路径去访问),这样本机浏览器向8080代理服务器发送的请求就带有key值,而8080代理服务器请求5000服务器时则将用空字符串替换掉key值,这样访问5000的服务器就不会出现路径的错误了,这也正是使用第二种方法的一个缺点,请求资源时必须加前缀(配置略微繁琐),优点显而易见可以配置多个代理,发送请求时(http://localhost:8080/前缀/students)还可以通过在端口号后面加前缀(加就走代理、不加则不走)的方式来灵活的控制请求是否走代理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot自定义Starter(@EnableXXX和META-INF的SPI自动添加)

目录 1. 自定义Starter1.1 场景和效果1.2 starter实现1.2.1 创建自定义starter项目1.2.2 把所有maven依赖导入1.2.3 实现公共代码逻辑1.2.4 添加方式一:实现RobotAutoConfiguration配置类1.2.5 添加方式二:实现RobotAutoConfiguration配置类 EnableRobo…

Linux下如何快速调试I2C设备

Linux下如何快速调试I2C设备 目录 1 什么场景下需要快速调试I2C设备 2 如何快速调试I2C设备 3 如何获取I2C Tools工具集 3.1 获取I2C Tools工具集源码 3.2 编译I2C Tools工具集源码 3.3 为设备添加I2C Tools工具集 4 如何使用I2C Tools工具集 5 小结 1 什么场景下需要快…

强化app广告变现用户隐私合规,移动广告变现合规技巧

移动广告技术的发展帮助开发者极大提升了广告变现效率,APP作为用户个人信息处理的重要载体,自从《个人信息保护法》颁布以来,个人信息的使用已经成为监管重点,开发者强化合规意识,让广告变现业务“细水长流”&#xff…

Ansible Filter滤波器的使用

一、【说在前面】 Ansible Filter一般被称为滤波器或者叫过滤器。 这个东西初次听到以为是什么科学计算的东西,但是想来ansible不太可能有什么滤波操作,所以这个东西本质是一个数值筛选器,内置函数,本质是一个为了做区别化的工具…

AcrelEMS-CB商业建筑能源管理系统解决方案-安科瑞 蒋静

1概述 AcrelEMS-CB商业建筑能源管理系统,集电力监控、电能质量监测与治理、电气安全预警、能耗分析、照明控制、新能源使用、能源收费以及设备运维等功能于一体,通过一套系统对商业建筑的能源进行统一监控、统一运维和调度,系统可以通过WEB和…

【极光系列】springBoot集成Hibernate

【极光系列】springboot集成hibernate gitee地址 直接下载可用 https://gitee.com/shawsongyue/aurora.git 模块:aurora_hibernate mysql安装教程 参考我另外一篇文章,直接下载安装 https://blog.csdn.net/weixin_40736233/article/details/1355829…

FPGA 原理图细节--画引脚

BGA引脚表示 1.1 FPGA此引脚要正确和清晰,会在“Package Pin”中用到次物理接口 1.2, MCU 只用管对应的GPIO逻辑接口就可以了 标识Bank电平 标识出对应Bank的电平,在电路设计中可以清晰的知道对应的脚位输出电平。在"IO std"也方便的选择 Ea…

常见的限流算法

本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。 天下武学出同源 正所谓天下武学殊途同归&#xff…

N5181A/安捷伦Agilent N5181A信号发生器

181/2461/8938产品概述: 规格(说明书):表示已校准的仪器在工作温度范围0-55C内存放至少2小时,除非另有说明,并经过45分钟预热期后的保证性能。的指标包括测量不确定度。除非另有说明,本文档中的…

【Python数据可视化】matplotlib之绘制高级图形:散点图、热力图、等值线图、极坐标图

文章传送门 Python 数据可视化matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图matplotlib之设置坐标:添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

全自动洗衣机什么牌子好?内衣洗衣机便宜好用的牌子推荐

随着内衣洗衣机的流行,很多小伙伴在纠结该不该入手一款内衣洗衣机,专门来洗一些贴身衣物,答案是非常有必要的,因为我们现在市面上的大型洗衣机只能做清洁,无法对我们的贴身衣物进行一个高度除菌,而小小的内…

基于python的深度神经网络原理与实践

理论基础 什么是神经网络 我们知道深度学习是机器学习的一个分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。而深度神经网络又是深度学习的一个分支,它在 wikipedia 上的解释如下: 深度神经网络(Deep N…

Vue中keep-alive缓存的详解(深度理解)

文章目录 一、Keep-alive 是什么二、使用场景三、原理分析四、思考题:缓存后如何获取数据beforeRouteEnteractived 参考文献 一、Keep-alive 是什么 keep-alive是vue中的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM ke…

四搭建dockerhub私有仓库

搭建dockerhub私有仓库 很多场景下,我们需使用私有仓库管理Docker镜像。相比Docker Hub,私有仓库有以下优势: 节省带宽,对于私有仓库中已有的镜像,无需从Docker Hub下载,只需从私有仓库中下载即可&#x…

MySQL篇—通过Clone插件进行远程克隆数据(第三篇,总共三篇)

在介绍 Clone 最终篇之前,我们先简要回顾一下前面所讲的内容。在第一篇中,我们探讨了 Clone 的用途、使用的前提条件、存在的限制,以及它的备份原理。Clone 是一种用于复制和备份数据的工具,它能够快速高效地创建数据的精确副本。…

Spark原理——逻辑执行图

逻辑执行图 明确逻辑计划的边界 在 Action 调用之前,会生成一系列的RDD,这些RDD之间的关系,其实就是整个逻辑计划 val conf new SparkConf().setMaster("local[6]").setAppName("wordCount_source") val sc new SparkContext(conf)v…

JVM篇--Java内存区域高频面试题

java内存区域 1 Java 堆空间及 GC? 首先我们要知道java堆空间的产生过程: 即当通过java命令启动java进程的时候,就会为它分配内存,而分配内存的一部分就会用于创建堆空间,而当程序中创建对象的时候 就会从堆空间来分…

2024--Django平台开发-Redis集群(十一)

内容回顾 主从复制。 哨兵:实例启动了,哨兵节点没启动,Python通过redis-py连接报错。一定要确保实例节点和哨兵节点都启动了。 搭建集群用的是虚拟机的多台centos服务器,你在跟着学习的时候,一定要全部都是虚拟机&am…

5.矩阵分析

矩阵分析 文章目录 矩阵分析一、方阵范数1.1 矩阵范数1.2 与矩阵乘积相容的矩阵范数【定义】自相容范数 / 方阵范数 1.3 与向量范数相容的矩阵范数【定义】矩阵范数与向量范数相容【定理】任意自相容范数必存在与它相容的向量范数 二、算子范数2.1 方阵的算子范数【定理】由向量…

PVE虚拟机安装qemu guest agent

pve虚拟机安装guest agent,使web平台可以直接显示虚拟机的ip,方便管理。 一、虚拟机需开启Qemu代理 首先,虚拟机需开启Qemu代理,需要关闭虚拟机再启动虚拟机并安装agent。网上有些文章说要把网卡配置为virtio,经测试是…