跨域
引用知乎上写的比较好的一个定义:跨域是指从一个域名的网页去请求另一个域名的资源。比如从http://www.baidu.com/ 页面去请求 http://www.google.com 的资源。跨域的严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域。
跨域问题
1.出于安全考虑,一般浏览器默认不支持跨域请求,必须要求请求的接口端明确支持跨域才可以。
2.前端跨域请求默认不会携带cookie信息,这样会导致一些信息丢失,比如sessionId。
解决跨域
后端:
服务端给http头部设置( “Access-Control-Allow-Origin”:"*" )属性
前端:
为了解决跨域时不能携带cookie问题,前端需要设置
xhrFields: {
withCredentials: true
}
服务端配置
常用的springboot跨域配置:
- @CrossOrigin注解 ,对方法进行注解,说明该方法支持跨域,对类进行注解,说明该类所有方法支持跨域;
- WebMvcConfigurer接口,实现接口方法addCorsMappings;
- WebSecurityConfigurerAdapter ,继承该类,实现configure接口;
测试案例
-
跨域测试思路如下:
- 1:springboot在方法或类上配置@CrossOrigin注解或采用实现WebMvcConfigurer接口或继承WebSecurityConfigurerAdapter类
- 2:本地修改hosts文件,配置127.0.0.1域名映射两个域名(localhost、lcoalhost1)
- 3:在前端界面以一个不同的域名去调用接口方法(比如以localhost访问静态页面,然后通过localhost1去调用服务端接口,这样就模拟了跨域)
案例代码
https://github.com/ingorewho/do-test/tree/master/crosorigin-test