Vue2:通过代理服务器解决跨域问题

一、场景描述

现在的项目大多数是前后端分离的。Vue前端项目通过ajax去请求后端接口的时候,会有同源策略的限制。从而产生跨域问题。
在这里插入图片描述

二、基本概念

1、什么是同源策略?

就是前端服务和后端服务的协议名,IP或主机名,端口号不完全一致。
比如,前端服务开在:http://127.0.0.1:8080
后端接口开在:http://127.0.0.1:5000
此时,前端代码中,用ajax请求后端接口,就会产生跨域问题。

2、解决跨域问题的方式

cors方式(推荐且常用)

cors本质是,后端服务器,在返回请求的时候,携带了一些特殊的响应头,从而,让浏览器忽略跨域问题
这种解决办法,造成的问题是,任何人都可以访问服务器接口拿数据,所以,要在服务器端设置IP白名单配合使用。

springboot项目实现cors
springboot增加配置类,进行全局配置,来实现全局跨域请求
配置如下:

@Configuration
public class CorsConfig {private CorsConfiguration buildConfig() {CorsConfiguration corsConfiguration = new CorsConfiguration();/*下面三个方法见名知意,可以按需添加,如果不确定自己的需求,全部加上即可*/corsConfiguration.addAllowedOrigin("*");corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");return corsConfiguration;}@Beanpublic CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", buildConfig());return new CorsFilter(source);}

接口上增加注解@CrossOrigin

@CrossOrigin
@Controller
@RequestMapping("/Pay")

jsonp方式

只能解决get请求的跨域问题。所以,用的很少。且需要前后端人员共同配合来解决跨域问题

代理服务器方式

在这里插入图片描述
ajax请求接口,会有同源策略的限制,从而出现跨域问题。
后端服务器之间互相访问,不用ajax,所以,没有同源策略的限制。

三、使用vue-cli实现代理服务器

实现1

vue.config.js

module.exports = {pages: {index: {// page 的入口entry: 'src/main.js'}},lintOnSave:false,//开启代理服务器devServer: {proxy: 'http://localhost:5000'}
}

axios请求的地址改成代理服务器的地址即可:

axios.get('http://localhost:8080/students')

在这里插入图片描述
注意:这种方式,当请求资源路径在项目的public文件夹中本来就有的时候,就不会请求服务器接口。
比如,public里面有个students文件时,这时候,http://localhost:8080/students获取到的就是这个public目录中的students文件里面的内容。
在这里插入图片描述

实现2(更实用)

vue.config.js

module.exports = {pages: {index: {//入口entry: 'src/main.js',},},lintOnSave:false, //关闭语法检查//开启代理服务器(方式二)devServer: {proxy: {'/test': {target: 'http://localhost:5000',pathRewrite:{'^/test':''},// ws: true, //用于支持websocket		默认true// changeOrigin: true //用于控制请求头中的host值		默认true},'/demo': {target: 'http://localhost:5001',pathRewrite:{'^/demo':''},// ws: true, //用于支持websocket		默认true// changeOrigin: true //用于控制请求头中的host值		默认true}}}
}

参数说明:

   changeOrigin设置为true时,服务器收到的请求头中的host为:localhost:5000changeOrigin设置为false时,服务器收到的请求头中的host为:localhost:8080changeOrigin默认值为true

axios请求的地址改成代理服务器的地址即可:

axios.get('http://localhost:8080/test/students')

这个方式,就可以解决方式1中,资源同名导致的问题。

官网:https://cli.vuejs.org/zh/config/#devserver-proxy

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

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

相关文章

0x02递推与递归

0x02递推与递归 递推者,自小而大,循序渐进;递归者,由上而下,分而治之 文章目录 0x02递推与递归例题T1:T2:T3:T4:T5T6 例题 T1: 92. 递归实现指数型枚举 - AcWing题库 …

Mysql 插入数据

1 为表的所有字段插入数据 使用基本的INSERT语句插入数据要求指定表名称和插入到新记录中的值。基本语法格式为: INSERT INTO table_name (column_list) VALUES (value_list); 使用INSERT插入数据时,允许列名称列表column_list为空,此时&…

网络安全战略中的法律问题

文章目录 前言一、各国网络安全的法律需求陡增二、战争的多维化使对法律的需求也越加多样(一)从平时到战时,网络斗争的平战模糊性增加法律适用难度(二)从高维到低维,博弈的多维性使法律需求层次更加丰富(三)从防御到进攻,网络空间的攻防不均衡改变法律斗争重点三、各国…

flink分别使用FilterMap和ProcessFunction实现去重逻辑

背景 在日常的工作中,对数据去重是一件很常见的操作,比如我们只需要保留重复记录的第一条,而忽略掉后续重复的记录,达到去重的效果,本文就使用flink的FilterMap和ProcessFunction来实现去重逻辑 FilterMap和ProcessF…

Compose | UI组件(十) | Box,Surface - 帧布局

文章目录 前言Box 组件的参数说明Box 组件的使用Surface 的参数说明Surface 的使用 总结 前言 Box组件是 按子组件依次叠加 的布局组件,相当传统View中的 FrameLayout Box 组件的参数说明 Composable inline fun Box(modifier: Modifier Modifier, …

Web服务器之Tomcat

文章目录 Web 服务器软件简介资源分类访问流程常见的Web服务器软件 Tomcat简介使用步骤使用Tomcat注意事项部署项目的方式方式一方式二方式三 问题中文乱码黑窗口一闪而过启动报错 Web 服务器软件 简介 服务器:安装了服务器软件的计算机服务器软件:接收…

漏洞原理远程命令执行

漏洞原理远程命令/代码执行 远程命令执行函数(Remote Command Execution Function)是指在一个网络环境中,通过远程执行命令来控制另一个计算机系统或设备的功能。 远程命令执行函数可以通过网络协议(如SSH、Telnet、RPC等&#x…

伊恩·斯图尔特《改变世界的17个方程》毕达哥拉斯定理笔记

它告诉我们什么? 直角三角形的三个边之间有什么关系。 为什么重要? 它提供了几何和代数之间的重要联系,使我们能够根据坐标计算距离。它也催生出了三角学。 它带来了什么? 测绘、导航,以及较近代出现的狭义和广义相对论…

第一节课,用户管理--后端初始化,项目调通。二次翻工2

一、网址来源: 快速开始 | MyBatis-Plus (baomidou.com) 进程: ​ 二、[此处不看]添加测试类,看下效果 2.1 参考 一、第一节课,用户管理--后端初始化,项目调通-CSDN博客 ​ 2.2 新建 SampleTest ​ 2.3 复…

SouthLeetCode-打卡24年01月第3周

SouthLeetCode-打卡24年01月第3周 // Date : 2024/01/15 ~ 2024/01/21 013.二分查找 (1) 题目描述 013#LeetCode.27.#北岸计划2024/01/15 // 略 (2) 题解代码 // 重做 014.移除元素 (1) 题目描述 014#LeetCode.160.#北岸计划2024/01/16 (2) 题解代码 Version1.0 c…

SpringMVC RESTful风格

Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。 Restful风格的请求是…

python-自动化篇-运维-语音识别

文章目录 理论文本转换为语音使用 pyttsx使用 SAPI使用 SpeechLib 语音转换为文本 代码和效果01使用pyttsx实现文本_语音02使用SAPI实现文本_语音03使用SpeechLib实现文本_语音04使用PocketSphinx实现语音转换文本 理论 语音识别技术,也被称为自动语音识别&#xf…

C++ STL库之Vector简介及例题(二)

C STL库之Vector简介及例题(二) 继“C STL库之Vector简介及例题(一)【点击查看】”之后,这篇文章我们继续上一次的介绍,继续对vector的一些算法的函数进行简析及例题分析。 元素操作 删除第2个元素&…

Hive之set参数大全-22(完)

指定是否启用矢量化处理复杂数据类型 在 Hive 中,hive.vectorized.complex.types.enabled 是一个配置参数,用于指定是否启用矢量化处理复杂数据类型。以下是有关该参数的一些解释: 用途: 该参数用于控制是否启用 Hive 的矢量化执…

安卓逆向学习之ADB的配置和使用及刷机root

ADB的配置和使用 ADB即Android Debug Bridge,安卓调试桥,是谷歌为安卓开发者提供的开发工具之一,可以让你的电脑以指令窗口的方式控制手机。可以在安卓开发者网页中的 SDK 平台工具页面下直接下载对应系统的 adb 配置文件,大小只…

矩阵键盘的使用

在定义局部变量时,一定要给该变量赋初值。在这个程序中,给按键按下的返回值变量 KeyNum 赋值为 20 。 矩阵键盘线行扫描法的学习链接:https://www.bilibili.com/video/BV1dv411z7Gd/?spm_id_from333.999.0.0&vd_sourceb91967c499b23106…

SpringBoot项目监听reids中过期的key

使用redission客户端操作redis maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.2.8.RELEASE</version> </dependency> <depe…

Vue3的v-model说明和使用方法

Vue 3 的 v-model 是一个语法糖&#xff0c;它为表单输入和应用状态之间创建了双向绑定。这样&#xff0c;当用户在表单中输入时&#xff0c;数据会自动更新&#xff0c;反之亦然。 说明 在 Vue 3 中&#xff0c;v-model 实际上是基于 value 属性和 input 事件实现的。这意味…

Python 因果推断(上)

引言 原文&#xff1a;causal-methods.github.io/Book/Introduction.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Vitor Kamada 电子邮件&#xff1a;econometrics.methodsgmail.com 最后更新日期&#xff1a;2020 年 8 月 15 日 这本书是使…

jupyter出现问题ModuleNotFoundError: No module named ‘exceptiongroup‘

今天使用pyg的jupyter环境发现这个环境没法用, 所以只能把这个kernel给重删了然后再装&#xff0c;操作记录如下 查看kernel jupyter kernelspec list注意不是jupyter kernel --list 需要加关键字spec, 删除kernel jupyter kernelspec remove pyg当重新安装这个kernel时可能…