前端跨域的原因以及解决方案(vue),一文让你真正理解跨域

跨域这个问题,可以说是前端的必需了解的,但是多少人是知其然不知所以然呢? 下面我们来梳理一下vue解决跨域的思路。

什么情况会跨域?

​ 跨域的本质就是浏览器基于同源策略的一种安全手段。所谓同源就是必须有以下三个相同点:协议相同、域名相同、端口相同。如果其中有一项不同,即出现非同源请求,就会产生跨域。

​ 跨域实际上是浏览器的限制,开发中使用 postman请求接口能够获得数据就印证了跨域是浏览器的限制这个问题。

那浏览器为什么要弄个跨域出来?

总的来说:浏览器跨域机制的主要目的是保护用户的安全和隐私.

为什么说跨域能保护用户的隐私呢 ?  比如说你打开了某个银行的官网 xxyh.com,然后又打开了一个恶意网站 xxxx.com,此时两个网站的域名肯定是不同的,这时候这个恶意的网站想从你银行网站中获取你的cookie等个人信息,那么浏览器就会阻止它的请求.  

我们开发过程中为什么会出现跨域?

刚才说了,协议、端口、域名,只要有一个不同,请求就会跨域。而我们开发中,项目运行在http://localhost:3000 上,这时候协议是 http,端口是 3000,域名是 localhost。而我们的请求一般是发到了后端给的服务器API地址,这时候协议端口域名出现不同了就会跨域 !

解决方法

​ 一般前端中解决跨域问题的方法有 JSONP,CROS,Proxy等,这里我们主要讲解一下在 vue中常用的 CORS方法:

一般来说,我们会在vue.config.js中配置proxy反向代理来解决跨域,但是解决的逻辑是怎样的呢?

拿我的项目来举例:首先,我们要知道proxy中代码的作用:

 // 接口转发proxy: {'/dev': {target: APIURl, // 后端服务器的地址changeOrigin: true, // 设置为 true,允许跨域pathRewrite: {'^/dev': '' // 可选的,重写请求路径,如果后端接口的路径中有特定的前缀,可以进行替换}}}

'/dev',这里指定了一个路径匹配规则,当前端发起的请求路径以'/dev'开头的时候会触发反向代理配置.

所以想要发起的请求走反向代理,就需要我们的请求是以'/dev'开头,但是我们封装的api的路径里面好像并没有开头写上'/dev',而且如果每个api都需要带上'/dev'的话,那需要在封装axios请求的时候每次在路径前面加上'/dev'也太麻烦了吧.

于是,我们可以在请求拦截器中设置请求的基地址为'/dev',然后每次请求都自动在请求路径前面带上了'/dev',就完成了每次请求都走反向代理这个需求.

请求拦截器  request:    

 我的基地址是配置在环境变量中的,他在环境变量中是:

 也就等价于:

const service = axios.create({baseURL:'/dev', // url = base url + request urlwithCredentials: false, // send cookies when cross-domain requeststimeout: define.timeout, // request timeout
})

这样,我们就给每个请求路径前面都加上了'/dev',然后在vue.config.js中,proxy发现我们的请求是'/dev'开头的,就会将我们的请求代理到:

 target: APIURl, // 填你后端服务器的地址

并且设置:

changeOrigin: true, // 设置为 true,允许跨域

然后这个配置的作用:

 pathRewrite: {'^/dev': '' // 可选的,重写请求路径,如果后端接口的路径中有特定的前缀,可以进行替换}

因为我们前面说了,'/dev'这个字符串的作用只是一个标识,我们给每个请求的开头都加上这个标识,就能够被反向代理识别到然后就能允许跨域 , 而后端给我的实际请求路径中是没有'/dev'的,所以,我们在他进入反向代理后,又要将他重写为 ' ', 让他不影响真正的请求路径. 

举个例子:反向代理就像一个保安,每天都有很多人要从代理过去,但是保安怎么分辨出哪些请求是要让他通过的呢? 这时候领导和保安说,你看到那些人手里拿着员工牌牌(‘/dev’)的就让他通过,而我们在请求拦截器中给每个请求前加上了'/dev' ,所以我们的请求就都能代理到真实请求的服务器上去啦 !

然后,既然跨域是浏览器的保护机制,那么我们是不是可以将自己浏览器的保护机制关了,让我们在开发中可以直接发起跨域请求呢? 

可以!  看我的这篇文章 :

谷歌关闭跨域限制.(生成一个开发浏览器),Chrome关闭跨域

希望对你有用!  !  !

有用的话别忘了点赞哦 ! ! !

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

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

相关文章

WinCC V7.5 中的C脚本对话框不可见,将编辑窗口移动到可见区域的具体方法

WinCC V7.5 中的C脚本对话框不可见,将编辑窗口移动到可见区域的具体方法 由于 Windows 系统更新或使用不同的显示器,在配置C动作时,有可能会出现C脚本编辑窗口被移动到不可见区域的现象。 由于该窗口无法被关闭,故无法进行进一步…

KafkaStream:Springboot中集成

1、在kafka-demo中创建配置类 配置kafka参数 package com.heima.kafkademo.config;import lombok.Data; import org.apache.kafka.common.serialization.Serdes; import org.apache.kafka.streams.StreamsConfig; import org.springframework.boot.context.properties.Configu…

8月11日上课内容 nginx的多实例和动静分离

多实例部署 在一台服务器上有多个tomcat的服务。 配置多实例之前,看单个实例是否访问正常。 1.安装好 jdk 2.安装 tomcat cd /opt tar zxvf apache-tomcat-9.0.16.tar.gz mkdir /usr/local/tomcat mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1 cp -a /u…

Linux系统管理:虚拟机ESXi安装

目录 一、理论 1.VMware Workstation 2.VMware vSphere Client 3.ESXi 二、实验 1.ESXi 7安装 一、理论 1.VMware Workstation 它是一款专业的虚拟机软件,可以在一台物理机上运行多个操作系统,支持Windows、Linux等操作系统,可以模拟…

使用selenium如何实现自动登录

回顾使用requests如何实现自动登录一文中,提到好多网站在我们登录过后,在之后的某段时间内访问该网页时,不会给出请登录的提示,时间到期后就会提示请登录!这样在使用爬虫访问网页时还要登录,打乱我们的节奏…

item_get_sales-获取商品销量详情

一、接口参数说明: item_get_sales-获取商品销量详情,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_get_sales 名称类型必须描述keyString是调用key&#xff08…

Spring的三种异常处理方式

1.SpringMVC 异常的处理流程 异常分为编译时异常和运行时异常,编译时异常我们 try-cache 进行捕获,捕获后自行处理,而运行时异常是不 可预期的,就需要规范编码来避免,在SpringMVC 中,不管是编译异常还是运行…

java:JDBC

文章目录 什么是JDBCJDBC使用步骤详解各个对象DriverManagerConnectionStatementResultSetPreparedStatement JDBC控制事务操作步骤示例 什么是JDBC 我们知道,数据库有很多种,比如 mysql,Oracle,DB2等等,如果每一种数…

C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】

wpf iconfont 外部图标引入&#xff0c;无法正常显示问题。 1. 检查资源路径和引入格式是否正确2. 检查资源是否包含在程序集中 1. 检查资源路径和引入格式是否正确 正确的格式&#xff0c;注意字体文件 “xxxx.ttf” 应写为 “#xxxx” <TextBlock Text"&#xe7ae;…

经典人体模型SMPL介绍(一)

SMPL是马普所提出的经典人体模型&#xff0c;目前已成为姿态估计、人体重建等领域必不可少的基础先验。SMPL基于蒙皮和BlendShape实现&#xff0c;从数千个三维人体扫描结果得来&#xff0c;后通过PCA统计学习得来。 论文&#xff1a;SMPL: A Skinned Multi-Person Linear Mode…

2023连锁收银系统该如何选?值得推荐的5款连锁收银系统

现在不管是连锁店还是零售店&#xff0c;只要是开店做生意赚钱的&#xff0c;都少不了要和钱打交道&#xff0c;尤其是对连锁店来说&#xff0c;收银工作更是重中之重。 连锁店涉及的门店较多&#xff0c;必须要有一套足够优秀的连锁收银系统&#xff0c;才能做好每个门店的收银…

使用 `tailwindcss-patch@2` 来提取你的类名吧

使用 tailwindcss-patch2 来提取你的类名吧 使用 tailwindcss-patch2 来提取你的类名吧 安装使用方式 命令行 Cli 开始提取吧 Nodejs API 的方式来使用 配置 初始化 What’s next? tailwindcss-patch 是一个 tailwindcss 生态的扩展项目。也是 tailwindcss-mangle 项目重要…

2023年上半年网络工程师上午真题及答案解析

1.固态硬盘的存储介质是( )。 A.光盘 B.闪存 C.软盘 D.磁盘 2.虚拟存储技术把( )有机地结合起来使用&#xff0c;从而得到一个更大容量的“内存”。 A.内存与外存 B.Cache与内存 C.寄存器与Cache D.Cache与外存 3.下列接口协议中&…

找不到msvcp140.dll无法继续执行代码怎么解决?分享三个解决方法

当你在运行某个程序或游戏时遇到msvcp140.dll缺失的错误提示&#xff0c;你可能会感到困惑和烦恼。在修复msvcp140.dll的过程中&#xff0c;我遇到了一些挑战&#xff0c;但最终成功解决了这个问题。以下是我总结的三个解决方法&#xff0c;希望能帮助你解决这个问题。 找不到m…

Mongodb (四十一)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 相关概念 1.2 特性 二、应用场景 三、安装 四、目录结构 五、默认数据库 六、 数据库操作 6.1 库操作 6.2 文档操作 七、MongoDB数据库备份 7.1 备…

小游戏扫雷实现教学(详解)

目录 【前言】 一、模块化程序设计&#xff08;多文件编程&#xff09;介绍 1.概述 2.传统编程的方式 3.模块化程序设计的方法 二、扫雷代码设计思路 三、扫雷代码设计 1.创建菜单函数 2.实现9x9扫雷 3.初始化棋盘 4.打印棋盘 5.随机布置雷的位置 6.排查雷的信息 7.回…

TEC2083BS-PD码转换器(解决博世矩阵控制PELCO派尔高球机的问题)

TEC2083BS-PD码转换器 使用说明 1.设备概述 控制码转换器在安防工程中起着非常重要的角色&#xff0c;随着高速球型摄像机在安防工程中大范围的使用&#xff0c;而高速球厂家都因为某些原因很少使用博世、飞利浦的协议。为此&#xff0c;工程商经常会遇到博世协议和PELCO协议之…

RabbitMQ工作流程详解

1 生产者发送消息的流程 (1)生产者连接RabbitMQ&#xff0c;建立TCP连接(Connection)&#xff0c;开启信道(Channel) (2)生产者声明一个Exchange (交换器)&#xff0c;并设置相关属性&#xff0c;比如交换器类型、是否持久化等 (3)生产者声明一个队列井设置相关属性&#xf…

Spring-Cloud-Loadblancer详细分析_3

前两篇文章介绍了加载过程&#xff0c;本文从Feign的入口开始分析执行过程&#xff0c;还是从FeignBlockingLoadBalancerClient.execute来入手 public class FeignBlockingLoadBalancerClient implements Client {private static final Log LOG LogFactory.getLog(FeignBlock…

Vue3实现图片懒加载及自定义懒加载指令

Vue3实现图片懒加载及自定义懒加载指令 前言1.使用vue3-lazyload插件2.自定义v-lazy懒加载指令2.1 使用VueUse2.2 使用IntersectionObserver 前言 图片懒加载是一种常见性能优化的方式&#xff0c;它只去加载可视区域图片&#xff0c;而不是在网页加载完毕后就立即加载所有图片…