同一个ip、同一个网络协议、同一个端口,三者都满足就是同一个域,否则就是跨域
解决办法
-
jsonp
spring4增加了jsonp的支持,只需要ControllerAdvice就可以开启。
Controller正常编写,只要在相应的包下。
前台必须用jsonp方式提交
-
CORS
使用注解CrossOrigin,表示入口函数可以实现跨域。可以直接指定类也可以指定某个方法
ajax按照普通的写就行
CORS原理
详细解释:http://www.ruanyifeng.com/blog/2016/04/cors.html
-
简单请求
对于简单请求,浏览器直接发出cors请求,就是在头信息中添加一个Origin字段。origin最短用来说明,本次请求来自哪个源(协议+域名+端口)。服务器根据这个值,决定是否同意这次请求。
如果Origin指定源不在许可范围,则返回一个正常的HTTP回应,浏览器发现,回应的头信息没有包含Access-Control-Allow-Origin,则跑出错误。
如果在许可范围,则返回的响应中会多几个字段
ccess-Control-Allow-Origin:该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求
-
非简单请求
非简单请求是那种对服务器有特殊要求的请求,例如请求方法是PUT、DELETE、或者content-type类型是application/json。
非简单请求会在正式通信钱,增加一次http查询请求,浏览器先询问服务器,当前网页的域名是否在服务器名单中,只有得到肯定答复,才会发出正式的XmlHttpRequest请求,否则报错
同源策略
同源是指,域名,协议,端口相同。它认为自任何站点装载的信赖内容是不安全的。当被浏览器半信半疑的脚本运行在沙箱时,它们应该只被允许访问来自同一站点的资源,而不是那些来自其它站点可能怀有恶意的资源。