学习Vue配置代理总结

news2024/11/18 15:46:16

今天学习了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:5000
	changeOrigin设置为false时,服务器收到的请求头中的host为:localhost:8080
	changeOrigin默认值为true
*/

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

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

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

相关文章

mysql5.7之从入门到放弃

系列文章目录 第一章 MySQL5.7之从入门到放弃 第二章 MySQL从入门到放弃之数据库体系结构与管理 第三章 MySQL基础应用之DDL、DCL、DML、DQL 第四章 MySQL之多表连接查询、AS别名、扩展内容 文章目录 系列文章目录前言一、Mysql的介绍和安装?1、什么是数据&#xf…

SqlAlchemy使用教程(二) 入门示例及编程步骤

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解 二、入门示例与基本编程步骤 在第一章中提到,Sqlalchemy提供了两套方法来访问数据库,由于Sqlalchemy 官方文档结构有些乱,对于ORM的使用步骤的描…

【生存技能】git操作

先下载git https://git-scm.com/downloads 我这里是win64,下载了相应的直接安装版本 64-bit Git for Windows Setup 打开git bash 设置用户名和邮箱 查看设置的配置信息 获取本地仓库 在git bash或powershell执行git init,初始化当前目录成为git仓库…

【Unity】【VRTK】【Pico】如何快速在VRTK中引入带动画的PICO控制器

【背景】 之前的VRTK篇章中,我只介绍了Oculus,Open VR,SImulator这三种Rig的配置方法,那么Pico如何融合VRTK进行开发呢? 【需要的开发包】 先像一个正常PICO项目那样导入PICO的SDK到Unity。VRTK 4的Package导入器中搜Pico,可以导入一个Pico的Integration,导入后Projec…

NLP论文阅读记录 - 2021 | WOS 智能树提取文本摘要深度学习

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 An Intelligent Tree Extractive Text Summarization Deep Learning …

NAT技术的原理、和实现方式介绍

目 录 一、关于内外网的网络问题 1、内网 2、外网 3、如何实现内网访问外网 4、外网如何访问公司内部的一个服务器? 二、NAT技术简介 三、NAT技术的基本原理。 四、内部网实现NAT的常用方式 1.静态转换 2.动态转换 3.端口多路复用(Por…

人工智能主流技术详解

人工智能(Artificial Intelligence,简称AI)是当今科技领域发展最迅速、最令人振奋的分支之一。本文将带您深入了解人工智能的主流技术,探索AI如何影响我们的生活、工作以及未来的发展。 一、什么是人工智能? 人工智能&…

SpringBoot+SSM项目实战 苍穹外卖(11) Apache ECharts

继续上一节的内容,本节学习Apache ECharts,实现营业额统计、用户统计、订单统计和销量排名Top10功能。 数据统计效果图: 目录 Apache ECharts入门案例 营业额统计用户统计订单统计销量排名Top10 Apache ECharts Apache ECharts 是一款基于 …

微信小程序(一)简单的结构及样式演示

注释很详细&#xff0c;直接上代码 涉及内容&#xff1a; view和text标签的使用类的使用flex布局水平方向上均匀分布子元素垂直居中对齐子元素字体大小文字颜色底部边框的宽和颜色 源码&#xff1a; index.wxml <view class"navs"><text class"active…

Leetcode3002. 移除后集合的最多元素数

Every day a Leetcode 题目来源&#xff1a;3002. 移除后集合的最多元素数 解法1&#xff1a;贪心 可以将数组去重后分为三个部分&#xff1a;nums1 独有的&#xff0c;nums2 独有的&#xff0c;nums1 与 nums2 共有的。 求集合 S 时&#xff1a; 先选择两个数组独有的。…

vcs makefile

主要参考&#xff1a; VCS使用Makefile教程_vcs makefile-CSDN博客https://blog.csdn.net/weixin_45243340/article/details/129255218?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170524049516800227431373%2522%252C%2522scm%2522%253A%252220140713.1301023…

强化学习应用(四):基于Q-learning的物流配送路径规划研究(提供Python代码)

一、Q-learning算法简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每…

12AOP面向切面编程/GoF之代理模式

先看一个例子&#xff1a; 声明一个接口&#xff1a; // - * / 运算的标准接口! public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }实现该接口&#xff1a; package com.sunsplanter.prox…

c#异形窗体遮罩效果

c#异形窗体遮罩效果&#xff0c;移动&#xff0c;关闭&#xff0c;最大化&#xff0c;最小化&#xff0c;还原操作 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D…

Java 8 中的 Stream 轻松遍历树形结构

直接上代码 测试实体类 /*** Menu** author lcry*/ Data Builder public class Menu {/*** id*/public Integer id;/*** 名称*/public String name;/*** 父id &#xff0c;根节点为0*/public Integer parentId;/*** 子节点信息*/public List<Menu> childList;public Me…

浮点数的表示

文章目录 一、基本介绍二、IEEE 754标准浮点数三、浮点数的运算3.1 浮点数的加减法3.2 浮点数的乘法3.3 浮点数的除法 四、demo参考 一、基本介绍 浮点数是与定点数相对的概念&#xff0c;计算机中的定点数约定小数点的位置不变。 由于计算机字长的限制&#xff0c;当需要表示…

几种mq实现延迟队列的方式

文章目录 rocket mq&#xff1a;延时消息rabbit mq&#xff1a;死信队列kafka方案&#xff1a;多级分区举例优点 rocket mq&#xff1a;延时消息 rabbit mq&#xff1a;死信队列 消息设定一段时间未消费就进入死信队列&#xff0c;然后消费者监听死信交换机。 kafka kafka自身…

【MySQL】mysql集群

文章目录 一、mysql日志错误日志查询日志二进制日志慢查询日志redo log和undo log 二、mysql集群主从复制原理介绍配置命令 读写分离原理介绍配置命令 三、mysql分库分表垂直拆分水平拆分 一、mysql日志 MySQL日志 是记录 MySQL 数据库系统运行过程中不同事件和操作的信息的文件…

vue的element ui使用el-table组件实现懒加载树、默认自动展开层级(一层,二层)、并且解决新增、删除、修改之后树节点不刷新问题

1.整体思路 问题&#xff1a;数据量太大了&#xff0c;导致接口返回数据时间较长。解决: 将ElementUi中Table组件加载改为懒加载&#xff08;查看文档&#xff09;。思路&#xff1a;初始化打开页面时只显示第一级菜单,用户点击展开菜单之后往后端发送请求,然后加载出一级子菜…

13 | 使用代理ip爬取安居客房源信息

这是一个简单的Python爬虫代码,用于从安居客网站爬取房地产信息。该爬虫使用了代理IP来绕过可能的封禁,并提供了一些基本的信息抽取功能。 如果访问过多,那么可能出现了验证码 对此,最好的方法就是换ip。 使用代理IP的主要目的是保护爬虫的稳定性和隐私。以下是一些常见的原…