Spring跨域

同一个ip、同一个网络协议、同一个端口,三者都满足就是同一个域,否则就是跨域

解决办法

  • jsonp

        spring4增加了jsonp的支持,只需要ControllerAdvice就可以开启。

Spring跨域

 

    Controller正常编写,只要在相应的包下。

    前台必须用jsonp方式提交

Spring跨域

    

  • CORS

        使用注解CrossOrigin,表示入口函数可以实现跨域。可以直接指定类也可以指定某个方法

Spring跨域

 

    ajax按照普通的写就行

Spring跨域

 

 

CORS原理

    详细解释:http://www.ruanyifeng.com/blog/2016/04/cors.html

  • 简单请求

    对于简单请求,浏览器直接发出cors请求,就是在头信息中添加一个Origin字段。origin最短用来说明,本次请求来自哪个源(协议+域名+端口)。服务器根据这个值,决定是否同意这次请求。Spring跨域

    如果Origin指定源不在许可范围,则返回一个正常的HTTP回应,浏览器发现,回应的头信息没有包含Access-Control-Allow-Origin,则跑出错误。

    如果在许可范围,则返回的响应中会多几个字段

Spring跨域

 

ccess-Control-Allow-Origin:该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求

 

  • 非简单请求

    非简单请求是那种对服务器有特殊要求的请求,例如请求方法是PUT、DELETE、或者content-type类型是application/json。

    非简单请求会在正式通信钱,增加一次http查询请求,浏览器先询问服务器,当前网页的域名是否在服务器名单中,只有得到肯定答复,才会发出正式的XmlHttpRequest请求,否则报错

 

同源策略

    同源是指,域名,协议,端口相同。它认为自任何站点装载的信赖内容是不安全的。当被浏览器半信半疑的脚本运行在沙箱时,它们应该只被允许访问来自同一站点的资源,而不是那些来自其它站点可能怀有恶意的资源。