跨域问题解释及前后端解决方案(SpringBoot)

devtools/2025/3/5 5:45:39/

一、问题引出

有时,控制台出现如下问题。

二、为什么会有跨域

2.1浏览器同源策略

浏览器的同源策略 ( Same-origin policy )是一种重要的安全机制,用于限制一个源( origin )的文档或

脚本如何与另一个源的资源进行交互。这个策略防止了恶意网站读取其他站点上的敏感数据。

例如:被钓鱼网站收集信息,使用 AJAX 发起恶意请求,传递转账信息给银行服务器

作用: 保护浏览器中网站的安全, 限制 AJAX 只能向同源 URL 发起请求

源: Web 网页内容的源由用于访问它的 URL 的方案( 协议 )、 主机名 (域名)和 端口 三部分组成。只

有当协议、主机和端口都匹配时,两个对象才具有相同的源。

同源: 网页加载时所在源,和 AJAX 请求时的源(协议,域名,端口号)全部相同即为同源。

三、什么是跨域

跨域:一个源 的文档 / 脚本,加载 另一个源 的资源就产生了跨域。

例如:网页所在源和 AJAX 访问的源(协议,域名,端口)有一个不同,就发生了跨域访问,请求响应

是失败的。

四、后端解决方案

4.1****方案一:局部配置

CORS 后端 采用 CORS (跨域资源共享),一种基于 HTTP 头的机制 ,该机制通过允许服务器标示除了它自己

以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。

后端 :设置 Access-Control-Allow-Origin 响应头字段,允许除了它自己以外的源来访问自己

的资源

前端 :正常发起 AJAX 请求,无需额外操作

直接在控制器或者特定的方法上使用 @CrossOrigin 注解来为单个 API 接口添加 CORS 支持

4.2、方案二:全局配置

新增 config 包,在 config 包下新建 CorsConfig 配置类

@Configuration
public class CorsConfig implements WebMvcConfigurer {/*** 跨域处理** @param registry*/@Overridepublic void addCorsMappings(CorsRegistry registry) {// 所有接口registry.addMapping("/**")// 所有源.allowedOrigins("*")// .allowedOrigins("http://localhost:3000")// 允许的方法.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")// 允许的请求头.allowedHeaders("*");// 是否允许携带 Cookie 等凭证信息// .allowCredentials(true);}
}

注意:如果同时设置了 allowedOrigins(“*”) 并开启了 allowCredentials(true) ,这是不安

全的做法,因为这允许任何来源携带凭证访问 API 。浏览器出于安全考虑,可能会拒绝这种设置。

五、前端解决方案

在开发环境中, 可以使用 vue-cli 内置的 代理功能 来解决跨域问题。在项目的 vue.config.js 文件

中添加如下配置:

// 开发环境代理配置
proxy: {'/api': {// 后端访问基础路径target: 'http://localhost:8080',changeOrigin: true,pathRewrite: {'^/api': ''}}
}

同时,修改 request.js 里的基础访问路径


http://www.ppmy.cn/devtools/164659.html

相关文章

11.【线性代数】——矩阵空间,秩1矩阵,小世界图

十一 矩阵空间,秩1矩阵,小世界图 1. 矩阵空间交集 和 和集 2. 所有解空间3. r 1 r1 r1的矩阵4. 题目5. 小世界图 空间:组成空间的元素的线性组合都在这个空间中。 1. 矩阵空间 举例:矩阵空间( M M M 所有3x3的矩阵&…

C++20中的std::bind_front使用及原理分析

目录 1.简介 2.使用 2.1.绑定普通函数 2.2.绑定成员函数 2.3.与STL算法搭配使用 3.实现原理 4.注意事项 5.总结 1.简介 C中的std::bind深入剖析-CSDN博客 std::bind_front是C20 新引入的一个函数模板。它住在<functional>这个头文件里&#xff0c;和我们熟悉的st…

玩转ChatGPT:Claude 3.7 Sonnet进行数据分析(分类)

一、写在前面 Claude 3.7 Sonnet刚刚发布&#xff0c;号称是全球第一个混合推理模型。 我们直接来测试一下它的数据分析能力。 首先&#xff0c;是解决机器学习分类问题。 二、开测 &#xff08;1&#xff09;描述性分析 上传csv数据文件&#xff0c;写下咒语&#xff1a;…

大模型工程师学习日记(十一):FAISS 高效相似度搜索和密集向量聚类的库

Facebook AI Similarity Search (Faiss /Fez/) 是一个用于高效相似度搜索和密集向量聚类的库。它包含了在任意大小的向量集合中进行搜索的算法&#xff0c;甚至可以处理可能无法完全放入内存的向量集合。它还包含用于评估和参数调整的支持代码。 Faiss 官方文档&#xff1a;We…

Python 绘制迷宫游戏,自带最优解路线

1、需要安装pygame 2、上下左右移动&#xff0c;空格实现物体所在位置到终点的路线&#xff0c;会有虚线绘制。 import pygame import random import math# 迷宫单元格类 class Cell:def __init__(self, x, y):self.x xself.y yself.walls {top: True, right: True, botto…

PyCharm接入本地部署DeepSeek 实现AI编程!【支持windows与linux】

今天尝试在pycharm上接入了本地部署的deepseek&#xff0c;实现了AI编程&#xff0c;体验还是很棒的。下面详细叙述整个安装过程。 本次搭建的框架组合是 DeepSeek-r1:1.5b/7b Pycharm专业版或者社区版 Proxy AI&#xff08;CodeGPT&#xff09; 首先了解不同版本的deepsee…

【计算机网络入门】初学计算机网络(九)

目录 1.令牌传递协议 2. 局域网&IEEE802 2.1 局域网基本概念和体系结构 3. 以太网&IEEE802.3 3.1 MAC层标准 3.1.1 以太网V2标准 ​编辑 3.2 单播广播 3.3 冲突域广播域 4. 虚拟局域网VLAN 1.令牌传递协议 先回顾一下令牌环网技术&#xff0c;多个主机形成…

MyBatis的关联映射

前言 在实际开发中&#xff0c;对数据库的操作通常会涉及多张表&#xff0c;MyBatis提供了关联映射&#xff0c;这些关联映射可以很好地处理表与表&#xff0c;对象与对象之间的的关联关系。 一对一查询 步骤&#xff1a; 先确定表的一对一关系确定好实体类&#xff0c;添加关…