SpringBoot跨域问题解决方法总结

跨域简述

现代浏览器处于安全的考虑,在http/https请求时必须遵守同源策略,否则即使跨域的http/https请求,默认情况下是被禁止的,ip(域名)不同、或者端口不同、协议不同(比如http、https) 都会造成跨域问题。

跨域错误

Access to XMLHttpRequest at ‘http://192.168.0.113:8081/device/group/findPageByType?timestamp=1557886425725’ from origin ‘http://localhost:8000’ has been blocked by CORS policy: The ‘Access-Control-Allow-Origin’ header contains multiple values ‘http://localhost:8000, *’, but only one is allowed.

一、 前端解决方案

  1. 使用 JSONP 来支持跨域的请求,JSONP 实现跨域请求的原理简单的说,就是动态创建 script 标签,然后利用 script 的 SRC 不受同源策略约束来跨域获取数据。缺点是需
    要后端配合输出特定的返回信息。
  2. 利用反应代理的机制来解决跨域的问题,前端请求的时候先将请求发送到同源地址的后端,通过后端请求转发来避免跨域的访问。

后来 HTML5 支持了 CORS 协议。CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。它通过服务器增加一个特殊的 Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持 CORS、并且判断 Origin 通过的话,就会允许 XMLHttpRequest 发起跨域请求。

前端使用了 CORS 协议,就需要后端设置支持非同源的请求,对于SpringBoot 对于CORS 同样有着良好的支持,

可以参看官网地址:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-cors

二、后端三种配置方式

1.配置过滤器

2.配置拦截器

以上两种是针对全局的配置方式

3.单个请求的跨域通过 @CrossOrigin 注解来实现

0

《SpringBoot跨域问题解决方法总结》有2个想法

发表评论

邮箱地址不会被公开。