CORS解决前后端分离时的跨域问题
1.在开发环境下前台调取后台接口跨域问题
(1)现在很多公司在做项目的时候,后端会直接在开发环境下与前端进行联调,但是这个时候虽然都在一个内网中前后端的的端口号还是可能会不一致,导致出现跨域问题,一般前台会通过Nginx进行代理来访问我们的接口,但是碰到技术比较差的前端,会直接让后台来解决跨域问题,由于是开发环境,一般我们只需要给自己的单个服务配置跨域即可。下面 说一下跨域的解决方案。
首先我们先了解一个概念,什么是跨域。
我们客户端去调用服务端的服务时,要满足一下几个条件
1.协议
2.域名
3.端口
这些都必须一致,只要其中有一个不同,就会出现跨域问题
解决的方案有两种
1.Jsonp
2.Cors跨域资源共享
我们挂出需要用到的注解
[email protected]:
@Configuration这个注解类似于一个xml配置文件的存在,我们在springboot项目中这个注解可以代替xml配置文件,这个注解放在类上面,配合@Bean注解使用,这些方法会被AnnotationConfigApplicationContext或者AnnontationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化spring容器
注意点:
[email protected]不可以是final类型
[email protected]不可以是匿名类
总结:
@Configuration等价于
@Bean等价于
@ComponentScan等价于<<context:component-scan base-package=”com.dxz.demo”/>>也就是我们平时说的扫包,可以扫描出@Configuration标注的类
@ComponentScan一般标注在启动类上
可以扫描出所有的配置类
下面讲一下springboot配置Cors跨域请求:
首先我们来了解一下CORS跨域资源共享
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。做到了以下两点
1.不破坏既有规则
2.服务器实现了CORS接口,就可以实现跨域
CORS策略(简单描述):
1.对于简单请求,CORS的策略时请求时在请求头中增加一个Origin字段,在服务器接收到请求后,根据该字段判断是否允许该请求访问
(1)如果允许,则在HTTP头信息中添加Access-Control-Allow-Origin字段
2.对于非简单请求:对于非简单请求的跨源请求,浏览器会在真实请求发出前,增加一次OPTION请求,称为预检请求(preflight request)。预检请求将真实请求的信息,包括请求方法、自定义头字段、源信息添加到 HTTP 头信息字段中,询问服务器是否允许这样的操作。
3.服务器收到请求时,需要分别对 Origin、Access-Control-Request-Method、Access-Control-Request-Headers 进行验证,验证通过后,会在返回 HTTP头信息中添加 :
(1)Access-Control-Allow-Origin: http://www.examples.com
(2)Access-Control-Allow-Methods: GET, POST, PUT, DELETE
(3)Access-Control-Allow-Headers: X-Custom-Header
(4)Access-Control-Allow-Credentials: true
(5)Access-Control-Max-Age: 1728000
4.他们的含义分别是:
(1)Access-Control-Allow-Methods: 真实请求允许的方法
(2)Access-Control-Allow-Headers: 服务器允许使用的字段
(3)Access-Control-Allow-Credentials: 是否允许用户发送、处理 cookie
(4)Access-Control-Max-Age: 预检请求的有效期,单位为秒。有效期内,不会重复发送预检请求