跨域问题解决方案(springboot跨域问题解决方案)

跨域问题解决方案(springboot跨域问题解决方案)出于浏览器的同源策略限制 同源策略 Sameoriginpo 是一种约定 它是浏览器最核心也最基本的安全功能 如果缺少了同源策略 则浏览器的正常功能可能都会受到影响 可以说 Web 是构建在同源策略基础之上的 浏览器只是针对同源策略的一种实现 同源策略会阻止一个域的 javascript 脚本和另外一个域的内容进行交互

大家好,我是讯享网,很高兴认识大家。



  出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说 Web 是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port

当一个请求 url 的协议、域名、端口三者之间任意一个与当前页面 url 不同即为跨域

请求页面url 当前页面url 是否跨域 原因 http://www.test.com/ http://www.test.com/index.html 否 同源(协议、域名、端口号相同) http://www.test.com/ https://www.test.com/index.html 跨域 协议不同(http/https) http://www.test.com/ http://www.baidu.com/ 跨域 主域名不同(test/baidu) http://www.test.com/ http://blog.test.com/ 跨域 子域名不同(www/blog) http://www.test.com:8080/ http://www.test.com:7001/ 跨域 端口号不同(8080/7001)

【1】无法读取非同源网页的 CookieLocalStorageIndexedDB

【2】无法接触非同源网页的 DOM

【3】无法向非同源地址发送 AJAX 请求

假设我们是前后段分离的项目,分别部署在以下两个ip上

前端页面的地址为 http://127.0.0.1:8848/test/index.html

后台服务的地址为 http://99.48.59.195:8082/

前后端的主要代码如下所示:

后端接口 HelloController.java

前端页面 index.html


讯享网

直接调用接口时,根据浏览器的同源策略可以知道如果我们此时不进行跨域处理的话,访问后端地址是会失败的,控制台会打印如下错误信息

添加 CORS 的配置信息,我们创建一个 CORSConfiguration 配置类重写如下方法,如下所示:

WebMvcConfigurer.java

方案一:

配置如下过滤器

CorsFilter.java

方案二:

利用过滤器配置跨域还可以使用如下方法

前面我们介绍过跨域产生的几种情况,只要保证同源(协议、域名、端口号相同),就不会出现跨域问题。

我们现在前端页面服务器所在IP为 http://127.0.0.1:8848

需要调用的后台服务的地址为 http://99.48.59.195:8082/test/

那么我们可以在前端服务器的 nginx 配置文件中添加如下代理:

这段配置表示的当前端服务器调用 8084 端口的请求时,会自动将请求转发到 http://99.47.134.33:8090/ 。对于前端请求来说此时的协议、域名、端口号都是相同的,那么就不会出现跨域问题。

点击按钮调用接口,成功返回数据,说明我们这里成功进行了跨域处理。

1.如果项目带有登录功能,需要验证登录凭证cookie时,此时需要在跨域配置中设置 Access-Control-Allow-Credentials 属性

否则会出现如下错误信息,这句话明确表明了此时要将 Access-Control-Allow-Credentials 头设置为 true

2.在使用过滤器方案一处理跨域时,如果使用了如下配置:

这里表示请求需要携带凭证信息,允许所有 ip 进行跨域。理论上是没有问题的,但是在测试的时候会发现控制台会抛出如下错误信息:

错误表明当请求的凭据模式为 “include” 时,响应中的标头不可以使用通配符 “*”。需要指定域名,这时我们可以对跨域配置作如下修改:

 

参考:什么是跨域?跨域解决方法

小讯
上一篇 2025-05-05 08:36
下一篇 2025-04-14 15:23

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/205398.html