跨域:跨域名的访问,是浏览器对ajax的一种限制,这样能够有效的防止跨站攻击html
跨域的范畴: 域名不一样 或 端口不一样 或 二级域名不一样前端
解决方案:java
第一种:因为前端基础薄弱,且该方式老掉牙,不讲解;nginx
第二种:利用nginx的反向代理,使得咱们表面发送不跨域的请求,实际代理了跨域,配置nginx相关配置便可;ajax
第三种:CORS,规范化的跨域请求解决方案,在服务端进行控制是否容许跨域;跨域
详解:浏览器会将ajax请求分为两类,其处理方案略有差别:简单请求、特殊请求。浏览器
简单请求:服务器
请求方法为 : head get postcookie
Http的头信息不能超过如下几种字段:Accept Accept-Language Content-Language Last-Event-ID Content-Typecors
Access-Control-Allow-Origin: http://manage.hahaha.com //可接受的域,是一个具体域名或者*,表明任意
Access-Control-Allow-Credentials: true //是否容许携带cookie,默认状况下,cors不会携带cookie,除非这个值是true Content-Type: text/html; charset=utf-8
服务的响应头中须要携带Access-Control-Allow-Credentials而且为true。
浏览器发起ajax须要指定withCredentials 为true
响应头中的Access-Control-Allow-Origin必定不能为*,必须是指定的域名
复杂请求:
请求方式: put
@Configuration public class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { //1.添加CORS配置信息
CorsConfiguration config = new CorsConfiguration(); //1) 容许的域,不要写*,不然cookie就没法使用了
config.addAllowedOrigin("http://manage.hahaha.com"); //2) 是否发送Cookie信息
config.setAllowCredentials(true); //3) 容许的请求方式
config.addAllowedMethod("OPTIONS"); config.addAllowedMethod("HEAD"); config.addAllowedMethod("GET"); config.addAllowedMethod("PUT"); config.addAllowedMethod("POST"); config.addAllowedMethod("DELETE"); config.addAllowedMethod("PATCH"); // 4)容许的头信息
config.addAllowedHeader("*"); //2.添加映射路径,咱们拦截一切请求
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); configSource.registerCorsConfiguration("/**", config); //3.返回新的CorsFilter.
return new CorsFilter(configSource); } }
摘自--某某笔记