跨域访问
下面都是对浏览器跨域进行的配置,对小程序和app的跨域不会生效
==============================================================
浏览器的同源策略:阻止从一个域加载的脚本去获取另一个域上的资源
只要 协议 域名 端口 有任何的不同,都被当作是不同的域
浏览器console看到Access-Control-Allow-Origin就代表跨域了
spring mvc 跨域访问
第一种 controller跨域注解
@RestController
@RequestMapping(value = "goodsSales")
// 增加运行跨域注解
// {}里的域名是允许哪些域名跨域访问
// 协议 域名 端口号都需要写 80端口不需要写
// 这种只能单个控制器使用 需要全局跨域需要令行配置
@CrossOrigin(origins = {"https://localhost:8080"})
public class GoodsSalesController {
// origins 可以配置 * 表示所有 端口,域名,协议都可以请求,但是不安全不建议配
// maxAge 预检请求缓存 3600 秒
// 非简单请求put/delete 等会发送两次请求,一次预检请求一次时间请求
// maxAge是把第一次预检结果缓存起来,接下来的3600秒内就不需要再次预检直接发送实际请求,减轻压力
@CrossOrigin(origins = {"*"}, maxAge = 3600)
public class GoodsSalesController {
配置完注解就可以跨域访问,本质上是在请求和响应中都有了说明
在请求的Request Header里加上了“Sec-Fetch-Mode: cors” 代表这是一个跨域访问
Response Header里的Vary这一行表示远程url允许跨域访问,浏览器就会把返回的结果解析,显示
如果没有配置跨域注解,那就没Vary这一行,浏览器就认为,该远程资源不允许被远程访问,即便在接口响应里得到了结果,浏览器也不会解析
第二种 spring mvc全局跨域配置(cors全局配置)
<beans>
<mvc:cors>
<!-- path="/request/**" 表示远程域名访问到request为前缀的url上都会被这个策略进行管理-->
<!-- allowed-origins 允许哪些域名访问-->
<!-- max-age 预检请求缓存时间-->
<mvc:mapping path="/request/**" allowed-origins="http://localhost:8080, http://localhost:8080" max-age="3600"/>
</mvc:cors>
</beans>
===================================================================
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦