跨域资源共享「CORS」就是在不一样的域名、协议、端口直接请求资源。本文主要讲述了什么是跨域,什么状况下会出现预检请求,我司的跨域安全访问html
出于安全的缘由,在没有被容许的状况下浏览器限制从不一样源「origin」发起请求,也多是跨站请求能够正常发起,可是返回结果被浏览器拦截了。前端
源:由协议+域名+端口组成,也就是说,这个三个要统一才同源web
例:数据库
跨域资源共享标准新增了一组HTTP首部字段,容许服务器声明哪些源站经过浏览器有权限访问哪些资源。在某些会对服务器数据产生做用「须要修改数据库」的请求「主要是GET之外的请求」,浏览器会先发送经过OPTIONS方法发送预检请求,从服务器那边获得返回是否容许跨域。服务器也能够携带是否须要身份凭证通知浏览器。json
也就是说:在你发送请求的时候,浏览器会本身先发送一个预检请求。后台只须要识别请求的方法「OPTIONS」,而后返回一些信息。 以下图: 后端
这部分信息通知了你修改本身的请求参数来符合服务器的要求, 服务器如何除了浏览器发送的预检请求,能够参照这个MDN Server-Side_Access_Control (CORS)。api
在如下状况下发送的请求不会触发预检请求跨域
使用如下方法之一:「GET HEAD POST」浏览器
头部字段在这个集合以内:「Accept, Accept-Language, Content-Language, Content-Type (须要注意额外的限制), DPR, Downlink, Save-Data, Viewport-Width, Width」安全
Content-Type如下三种之一:「text/plain,multipart/form-data,application/x-www-form-urlencoded」
...
例子:我在发送登陆的时候,头部字段自定义了Authorization,这时候就触发预检请求
公司主要采用的就是JWT的跨域认证解决方案。JWT的意思就是:用户发送登陆信息「用户名,密码」给服务器,服务器认证后生成一个JSON对象,给用户储存,以后用户请求数据都须要带上JWT来发送请求。
若是前端没有跟后端创建统一API设计规范,可使用这个 RESTful api