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

news2024/11/20 3:25:39

跨域这个问题,可以说是前端的必需了解的,但是多少人是知其然不知所以然呢? 下面我们来梳理一下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 url
  withCredentials: false, // send cookies when cross-domain requests
  timeout: define.timeout, // request timeout
})

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

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

并且设置:

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

然后这个配置的作用:

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

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

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

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

可以!  看我的这篇文章 :

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

希望对你有用!  !  !

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

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

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

相关文章

网络套接字

网络套接字 文章目录 网络套接字认识端口号初识TCP协议初识UDP协议网络字节序 socket编程接口socket创建socket文件描述符bind绑定端口号sockaddr结构体netstat -nuap:查看服务器网络信息 代码编译运行展示 实现简单UDP服务器开发 认识端口号 端口号(port)是传输层协…

Python 3 使用HBase 总结

HBase 简介和安装 请参考文章:HBase 一文读懂 Python3 HBase API HBase 前期准备 1 安装happybase库操作hbase 安装该库 pip install happybase2 确保 Hadoop 和 Zookeeper 可用并开启 确保Hadoop 正常运行 确保Zookeeper 正常运行3 开启HBase thrift服务 使用命…

谈谈召回率(R值),准确率(P值)及F值

通俗解释机器学习中的召回率、精确率、准确率,一文让你一辈子忘不掉这两个词 赶时间的同学们看这里:提升精确率是为了不错报、提升召回率是为了不漏报 先说个题外话,暴击一下乱写博客的人,网络上很多地方分不清准确率和精确率&am…

前端实战系列:【2023酷炫前端特效】HTML蜂巢特效(附完整可执行代码 + 全网唯一!超详细注释分析 (熬夜换来的...),让你看得懂,敲的出代码!

久别重逢非昨日,万语千言不忍谈。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🏅[4] 阿里云社区特邀专家博主🏅 🏆…

【等保测评】等保初级测评师试题合集(3w字汇总)

【等保测评】信息安全等级保护初级测评师试题合集 一、法律法规单选多选判断 二、实施指南单选多选 三、定级指南四、基本要求五、测评准则六、信息安全等级测评模拟模拟试题1一、单选二、多选三、判断四、简答 模拟试题2一、单选二、多选三、判断四、简答 模拟试题3一、单选二…

MPLS基础知识

MPLS:多协议标签交换 多协议:可以基于多种不同的3层协议来生成2.5层的标签信息; 包交换—包为网络层的PDU,故包交换是基于IP地址进行数据转发;就是路由器的路由行为; 原始的包交换:数据包进入…

【自动化测试】接口自动化01

文章目录 一、熟悉若requests库以及底层方法的调用逻辑二、接口自动化以及正则和Jsonpath提取器的应用6. 高频面试题:9. 示例:接口关联13. 文件上传示例14. cookie关联的接口 努力经营当下 直至未来明朗 一、熟悉若requests库以及底层方法的调用逻辑 接…

on-java-8 知识总结(低频部分)

Perl简介 Perl 是 Practical Extraction and Report Language 的缩写,可翻译为 “实用报表提取语言”。最开始,Perl是一门文本处理语言,不过现在已经是通用的语言了。 作者吐槽其write-only,想必是因为其灵活性,同一目标下能写出…

Android设备通过蓝牙HID技术模拟键盘实现

目录 一,背景介绍 二,技术方案 2.1 获取BluetoothHidDevice实例 2.2 注册/解除注册HID实例 2.3 Hid report description描述符生成工具 2.4 键盘映射表 2.5 通过HID发送键盘事件 三,实例 一,背景介绍 日常生活中&#xff0…

第15集丨Vue 江湖 —— 组件

目录 一、为什么需要组件1.1 传统方式编写应用1.2 使用组件方式编写应用1.3 Vue的组件管理 二、Vue中的组件1.1 基本概念1.1.1 组件分类1.1.2 Vue中使用组件的三大步骤:1.1.3 如何定义一个组件1.1.4 如何注册组件1.1.5 如何使用组件 1.2 注意点1.2.1 关于组件名1.2.2 关于组件标…

14.Linkedin在中国市场的主要竞争对手

自Linkedin敲响了中国的大门之后,在国内市场也拥有了大量的用户。经过不断地发展了改革创新,更是成为了国内影响力比较大的职业社交平台之一。为了能够在国内市场中取得成功,在进入国内之前,Linkedin就采取了全新的模式,不仅仅是销售机构,也具备了产品技术、市场、公关等完整的…

达芬奇无法播放视频,黑屏,不能预览画面

说一下其中一个原因,是因为用了像是xdisplay,super display这类软件,他们会安装一个显卡驱动而这个驱动就会导致这个问题。 方法很简单,在设备管理器里面,显示卡一览,卸载掉除了你的电脑显卡以外的虚拟显卡…

webpack 从入门到放弃!

webpack webpack于2012年3月10号诞生,作者是Tobias(德国)。参考GWT(Google Web Toolkit)的code splitting功能在webpack中进行实现。然后在2014年Instagram团队分享性能优化时,提出使用webpack的code splitting特性从而大火。 现在webpack的出现模糊了任…

计算机视觉目标检测性能指标

目录 精确率(Precision)和召回率(Recall) F1分数(F1 Score) IoU(Intersection over Union) P-R曲线(Precision-Recall Curve)和 AP mAP(mean…

Redis中使用lua脚本

微信公众号访问地址:Redis中使用lua脚本 推荐文章: 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、为什么引入Redisson分布式锁? 4、Redisso…

60页数字政府智慧政务大数据资源平台项目可研方案PPT

导读:原文《60页数字政府智慧政务大数据资源平台项目可研方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 项目需求分析 项目建设原则和基本策略…

C++之类之间访问函数指针(一百八十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

一、window配置微软商店中的Ubuntu,及错误解决方法

(1)首先,在微软商店中搜索“Ubuntu”,下载你喜欢的版本(此处) (2)设置适用于window的Linux子系统,跟着红色方框走 点击“确定”之后,会提示你重启电脑,按要求重启电脑即可…

无涯教程-Perl - sub函数

描述 此函数定义一个新的子例程。上面显示的参数遵循以下规则- NAME是子例程的名称。可以在有或没有原型规范的情况下预先声明命名的子例程(没有关联的代码块)。 匿名子例程必须具有定义。 PROTO定义了函数的原型,调用该函数以验证提供的参数时将使用该原型。 ATTRS为解析…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——假言—公式化转换—等价+矛盾

文章目录 第一节 假言—公式化转换—等价矛盾真题(2012—38)—假言—A→B的公式化转换—A→B的等价命题:①逆否命题:非B→非A。真题(2015—47) —假言A→B的公式化转换—A→B的等价命题:①逆否…