什么是跨域请求
当前端使用ajax获取数据的时候,如果当前页面的地址和所需要请求的服务器的地址 :
协议 域名 端口
任何一个不一样的时候就会产生跨域请求
跨域请求的表现
获取不到数据信息并且前端报跨域错误提示
跨域请求获取不到数据的原因
后端服务器接口数据以返回,但是浏览器不将数据返回给ajax中的success
如何处理跨域请求
在服务器端的Response Header中添加
Access-Control-Allow-Origin 的信息
例如在SpringCloud中项目中会把跨域配置全都配置在网关中,由网关统一管理
跨区请求和OPTIONS请求的关系
跨域请分为:
简单请求:
get post
非简单请求:
put delete 自定义的header信息
按上面"如何处理跨域请求" 中写的方法解决后,访问接口还是会出现
以上的options请求
因为所有非简单请求 在正式跨域的请求前,浏览器会根据需要,发起一个“PreFlight”(也就是Option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源,或者域),还有是否需要Credentials(认证信息)
从这张图中我们可以看出,非简单请求在发送真正的请求前会发送一次Preflight Request,接收一个Preflight Response。(这也是Preflight恶心的地方)。
所以就需要服务器对options请求放行
比如在SpringCloud中项目中网关的跨域请求中添加
Access-Control-Allow-Headers
和
Access-Control-Allow-Methods
放行规则