》
1、什么是跨域?
1、跨域是指、跨域名访问,例如:
- 域名不一致;
- 域名一致,端口不同;
- 二级域名访问;
2、跨域问题什么时候发生?
- 只有Ajax 请求时候才会发生该问题;一个页面发生 Ajax 请求只能够请求 当前域名的路径、有效防止跨域攻击;
3、如何洁具跨域问题?
- cors解决跨域,“跨域资源共享”(Cross-origin resource sharing);
2、cors解决跨域原理:
1、当浏览器发现发起的ajax请求是简单请求时,会在请求头中携带一个字段:Origin.
Origin. 字段中内容为:协议+域名+端口,服务会根据这个值决定是否允许其跨域。
2、如服务器允许跨域,在返回的响应头中携带以下信息;
Access-Control-Allow-Origin: http://域名 Access-Control-Allow-Origin可接受的域名
Access-Control-Allow-Credentials: true Access-Control-Allow-Credentials是否允许携带cookie,默认不携带cookie
Content-Type: text/html; charset=utf-8
》
2.1、携带cookie 需满足条件有哪些?
- 响应头中的Access-Control-Allow-Origin一定不能为*
- Access-Control-Allow-Credentials: true
- 浏览器发起ajax需要指定withCredentials 为true ,就是Ajax中指定withCredentials 为true
3、解决跨域配置:
springMvc 已经集成了 CorsFilter ,直接配置即可;
在网关微服务配置配置类、
/**
* @auther SyntacticSugar
* @data 2018/12/3 0003下午 7:16
* 配置 跨域操作 cookie
*/
@Configuration
public class GlobalCorsConfig {
@Bean
public CorsFilter corsFilter() {
//添加配置
CorsConfiguration conf = new CorsConfiguration();
/**
* 设置域 、 设置是否携带cookie 、设置方式
*/
conf.addAllowedOrigin("http://manage.leyou.com");
conf.setAllowCredentials(true);
conf.addAllowedMethod("GET");
conf.addAllowedMethod("PUT");
conf.addAllowedMethod("DELETE");
conf.addAllowedMethod("OPTIONS");
conf.addAllowedMethod("POST");
conf.addAllowedMethod("HEAD");
conf.addAllowedMethod("PATCH");
//允许的头信息
conf.addAllowedHeader("*");
// 添加映射路径
UrlBasedCorsConfigurationSource urlSource = new UrlBasedCorsConfigurationSource();
urlSource.registerCorsConfiguration("/**",conf);
return new CorsFilter(urlSource);
}
}