随机掉落的项目足迹:Vue3中vite.config.ts配置代理服务器解决跨域问题

server/2024/10/9 7:08:06/

跨域问题产生的原因:浏览器同源策略

后面的通俗解释小标题下的内容是便于大家理解同源策略和跨域问题。

同源策略跨域问题这两个小标题下的内容虽然比较专业不容易阅读,但是还是建议大家花时间理解并记忆,因为这是前端面试中的常考点。

同源策略

同源策略(Same-0rigin Policy)是指浏览器安全策略中的一项重要规则,它规定了浏览器只允许当前网页的脚本与来自同一站点(协议、主机、端口号相同)的窗口进行交互,而限制了与不同源(协议、主机、端口号任一不同)的窗口进行交互。这种限制能够有效保障用户的信息安全和隐私。

同源策略限制了跨域请求、Cookie、Localstorage、IndexedDB 等跨站点资源的访问,防止恶意网站窃取用户数据和攻击。同源策略的存在是 Web 安全的重要保障,是浏览器防范跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等安全威胁的关键措施。

如果需要进行跨域请求或共享数据,可以通过特定的手段(如 JSONP、CORS、代理等)来实现。同时,Web 应用开发中应当严格遵守同源策略的原则,避免将敏感信息暴露在跨域页面中。

跨域问题

跨域问题(Cross-0rigin Resource sharing,CORs)是由于浏览器的同源策略(Same-0rigin Policy)导致的。如果两个 URL 的协议、主机名和端口号都相同,那么它们就是同源的,否则就是跨域的。当网页发起跨域请求时,浏览器会根据同源策略限制请求。 

通俗解释

举个例子:我的前端服务运行在我电脑的5173端口,而后端服务运行在我队友电脑的8080端口,由于咱们前后端不在同一个端,所以我通过浏览器向我队友的后端服务发送请求,浏览器会认为我的请求是不安全的,于是拒绝我的请求

而如果是小程序开发,小程序页面不是运行在浏览器的,没有同源策略,也就不存在跨域问题,小程序开发中,前端可以直接向不同源的后端发送请求

配置代理服务器解决跨域问题

原理

由浏览器直接向后端服务发送请求会产生跨域问题

那么我们可以通过配置代理来解决跨域问题:浏览器先将请求发送至前端服务(由于都是5173端口,不存在跨域问题),再由前端服务转发至后端服务(前端服务和后端服务之间的交互是脱离浏览器的,没有同源策略,也就不存在跨域问题)

这时,前端服务就充当了一个“中介”,我们称它为“代理服务器”

 

方法

找到关于请求配置的request.js文件,将请求基地址改成/apis(改成其他英文单词也行),由于你没有写类似于http://localhost:8080这样的基地址,而是只写了一个不完整的地址/apis,所以会自动拼接上AJAX请求发送时所在的源,也就相当于你在请求基地址写的是'http://localhost:5173/apis'

这样做的目的是将请求发往前端服务所在的源

 vite.config.ts文件中,添加如下配置,这段代码可以将前端服务收到的请求转发至后端服务

配置代理服务器的代码如下,大家需要根据自己的实际情况修改target中后端服务所在的源

注意:第三行代码中单引号里面的内容必须和前面的请求基地址一样——'/apis'

server: {proxy: {'/apis': {target: 'http://enx5eq.natappfree.cc', //后端服务所在的源changeOrigin: true, //修改源rewrite: (path) => path.replace(/^\/apis/, '') // /apis替换为''}}}

如果后端接口地址是/api/getVerification,那么我们就可以写出如下函数,最终的请求将被发送至http://enx5eq.natappfree.cc/api/getVerification

代码解释

假设请求接口的地址是/user/getUserName,由于请求基地址的配置,请求将会发往http://localhost:5173/apis/user/getUserName

而由于 http://localhost:5173/apis/user/getUserName 中包含/apis,代理生效,请求最终会发往http://enx5eq.natappfree.cc/user/getUserName,原理如下图

需要注意的是,虽然浏览器显示的请求地址看起来好像不对,但是实际上请求已经被正确发送至后端服务器了


http://www.ppmy.cn/server/129157.html

相关文章

用YOLO和LLM增强的OCR

虽然最近我花了很多时间在大型语言模型 (LLM) 上进行实验,但我对计算机视觉的热情始终未减。因此,当我有机会将两者融合在一起时,我迫不及待地想要立即开始。在 Goodreads 上扫描书籍封面并将其标记为已读一直感觉有点神奇,我很兴…

STM32-HAL库 驱动DS18B20温度传感器 -- 2024.10.8

目录 一、教程简介 二、驱动理论讲解 三、CubeMX生成底层代码 四、Keil5编写代码 五、实验结果 一、教程简介 本教程面向初学者,只介绍DS18B20的常用功能,但也能满足大部分的运用需求。跟着本教程操作,可在10分钟内解决DS18b20通信难题。…

【PyTorch】循环神经网络

循环神经网络是什么 Recurrent Neural Networks RNN:循环神经网络 处理不定长输入的模型常用于NLP及时间序列任务(输入数据具有前后关系) RNN网络结构 参考资料 Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs Und…

Java类设计模式

1、单例模式 核心:保证一个类只有一个对象,并且提供一个访问该实例的全局访问点 五种单例模式:主要:饿汉式:线程安全,调用效率高,不能延时加载懒汉式:线程安全,调用效率…

【人工智能】AI人工智能的重要组成部分,深入解析CNN与RNN两种神经网络的异同与应用场景和区别

文章目录 一、卷积神经网络(CNN)详解1. 特征与结构CNN的基本结构 2. 应用场景3. 代码示例 二、循环神经网络(RNN)详解1. 网络结构与特点RNN的基本结构 2. 应用场景3. 代码示例 三、CNN与RNN的异同点1. 相同点2. 不同点 四、CNN与R…

js进阶——深入解析JavaScript中的URLSearchParams

深入解析 JavaScript 中的 URLSearchParams 在现代Web开发中,我们经常需要处理URL中的查询参数,尤其是在构建动态Web应用时。这些查询参数(query parameters)通常以 ?keyvalue&key2value2 的形式存在。JavaScript 提供了一个…

二分+滑窗,CF 1208B - Uniqueness

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 B - Uniqueness 二、解题报告 1、思路分析 观察单调性:对于合…

Docker实践与应用举例

Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖打包在一个轻量级的容器中运行。容器可以在任何环境中保持一致的运行状态,从而极大地简化了开发、测试和部署过程。接下来,我将详细介绍 Docker 的实践与应用举例。 1. Docker 的…