为什么会出现跨域?
- 因为是浏览器的同源策略限制导致的。
- 同源策略(Sameoriginpolicy)是一种约定。
- 同源指在同一个域中。两个页面具有相同的协议(protocol)、主机(host)、端口(prot)。
- 协议、主机、端口都相同说明在同一个域中,不相同就会导致跨域
跨域会出现什么问题?会出现如下错误
No ‘Access-Control-Origin’ header is present on the requested resource.Origin
‘http://localhost:9011/brand’ is therefore not allowed access. The reponse had HTTP status code 400
- 因为我们采用的是前后端分离的编程方式,前端和后端必定存在跨域问题,可以采用CORS解决跨域问题
跨域的解决方案(CORS)
- CORS是一个W3C标准,全称是“跨域资源共享”(Cross-origin resource sharing)。
- 只要实现CORS通信即可,实现CORS通信关键是服务器。只要服务器实现CORS接口,就可以夸源通信了
请求过程图
CORS通信它会自动添加一些附加的头信息
-
Preflight Reques(域请求 ) 就是请求发出的时候携带的头信息
-
头信息:Access-Control-Request-Handers: access-control-allow-origin 表示当前的请求已经开启了跨域请求操作了
-
然后服务器给我们返回一个 PreflightResponse(域响应)
-
头信息:Access-Control-Request-Handers: access-control-allow-origin 表示开启了服务端的跨域请求操作
问题:发送请求和响应的时候这么携带这些头信息呢?
- 解决:SpringMVC的版本在4.2或以上的版本,可以使用注解实现跨域,只需要在controller类添加注解@CrossOrigin就可以。
@CrossOrigin //开启跨域请求操作
public class TestController {}