跨域的概念
首先,什么是跨域?
跨域指的是,当一个网站向另一个非同源网站发送请求时,出于安全原因,浏览器限制从脚本(javascript)内发起的跨源HTTP请求。
所谓同源指的是,协议,域名,端口均相同。举个栗子:
http://localhost/index.html 访问 http://localhost/findOne.do (非跨域)
http://localhost:8080/index.html 访问 http://localhost/findOne.do (跨域,端口号不同)
http://localhost/index.html 访问 https://localhost/findOne.do (跨域,协议不同)
http://localhost/index.html 访问 http://127.0.0.1/findOne.do (跨域,域名不同)
当前流行的跨域解决方法有两种,一种是发送jsonp格式的请求,另一种就是基于cors解决跨域资源共享问题
CORS解决跨域请求
CORS将请求分为两种,一种为简单请求,另一种为预检请求(这里可以理解为复杂请求)。
简单请求和复杂请求的区别在于,是否在请求头(heads)添加了自定义字段。
对于简单请求,只需要在服务器端接口添加 response.addHeader("Access-Control-Allow-Origin","*");
/**
* Cors跨域请求演示
* @author:LiChong
* @date:2018/7/26
*/
@RestController
@RequestMapping("/cors")
public class CorsController {
@PostMapping("/demo")
public void demo(HttpServletResponse response){
response.addHeader("Access-Control-Allow-Origin","*");//这里指允许任何的跨域请求
//response.addHeader("Access-Control-Allow-Origin","www.lichong.com");//只允许来自www.lichong.com的跨域请求
}
}
对于复杂请求,我这里暂没有遇到这里的需求,以后遇到了再补充;
参考网站:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS