Cors协议
H5中的新特性:Cross-Origin Resource Sharing(跨域资源共享)。通过它,我们的开发者(主要指后端开发者)可以决定资源是否能被跨域访问。
cors是一个w3c标准,全称是"跨域资源共享"(Cross-origin resource sharing),它允许浏览器(目前ie8以下还不能被支持)像我们不同源的服务器发出xmlHttpRequest请求,我们可以继续使用ajax进行请求访问。
浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
详情文章参考:http://www.ruanyifeng.com/blog/2016/04/cors.html
解决方案一:WebMvcConfigurerAdapter配置加入Cors的跨域
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}
但是目前较新的spring版本已不推荐使用
方案二:filter解决跨域
@Component
public class CORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, HEAD");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
方案三、使用@CrossOrigin
@CrossOrigin(origins = "http://192.168.1.10:8080", maxAge = 3600)
@RequestMapping("rest_index")
@RestController
public class IndexController{
这样就可以指定该controller中所有方法都能处理来自http:19.168.1.10:8080中的请求。
Filter的方案也支持springmvc。
WebMvcConfigurerAdapter配置加入Cors的跨域常用于springboot。
参考文章:https://www.cnblogs.com/diandianquanquan/p/10607102.html
评论