跨域请求概念
什么是域?
当两个应用的协议,主机地址(或域名),端口号(默认80)其中一项不同,则认为他们的域是不同的。
什么是 js 跨域?
两个不同的域 a,b,在a的js脚本中用ajax调用了b的后端地址,跨越是浏览器进行安全限制的一种方法,如果浏览器禁用了这种安全限制就不会出现跨域问题
跨域请求过程
浏览器 -------> 服务器 (预请求) ---- 判断返回的头信息是否支持支持跨域请求
头信息 Access - Control - Allow - Origin:域 ---->后边的域是可以实现跨域请求的域
浏览器 -------> 服务器 (预响应) -----返回预请求响应
浏览器 -------> 服务器 (请求)
浏览器 -------> 服务器 (响应)
跨域解决方案 – CORS
它允许浏览器向跨调服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制,整个CORS通信过程,都是浏览器自动完成,不需要用户参与,对于开发者来说,CORS通信与同源AJAX通信没有差别,代码完全一样,浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会发出一次附加的请求,但是用户不会感觉到,因此,实现CORS通信的关键是服务器,只要服务器实现了CORS 接口,就可以实现跨域通信
java解决跨域
底层
// 设置头信息和可以请求的域即可
response.setHeader("Access-Control-Allow-Origin","Http:localhost:8081");
// 所有的域都可以
response.setHeader("Access-Control-Allow-Origin","*");
// 如果设置操作cookie,可以请求的域不可以设置为 * ,需指定域
response.setHeader("Access-Control-Allow-Credentials","true");
spring MVC解决跨域
// 相当于response.setHeader("Access-Control-Allow-Origin","Http:localhost:8081")
@CrossOrigin(origins="Http:localhost:8081",allowCredentials = "true")//如果要操作cookie