首页 > 其他分享 >cors跨域处理时option预检请求

cors跨域处理时option预检请求

时间:2022-09-27 17:02:51浏览次数:83  
标签:Control 浏览器 请求 预检 Access option cors 服务器 跨域

在后端接口使用了cors跨域处理(后端通过修改Access-Control-Allow-origin来支持跨域)浏览器发出cors相关请求时会在头信息之中,增加一个Origin字段。

浏览机器一旦发现跨域请求,就会自动添加一些附加的头信息,有时还会多出一次附加的请求(浏览器自动完成,用户不会察觉),服务器响应特定标头Access-Control-,体现对跨源访问的授权态度

 

跨域过程分析:

浏览器先根据同源策略对前端页面和后台交互地址做匹配,若同源,则直接发送数据请求;若不同源,则发送跨域请求。
服务器收到浏览器跨域请求后,根据自身配置返回对应文件头。若未配置过任何允许跨域,则文件头里不包含 Access-Control-Allow-origin 字段,若配置过域名,则返回 Access-Control-Allow-origin + 对应配置规则里的域名的方式。
浏览器根据接受到的 响应头里的 Access-Control-Allow-origin 字段做匹配,若无该字段,说明不允许跨域,从而抛出一个错误;若有该字段,则对字段内容和当前域名做比对,如果同源,则说明可以跨域,浏览器接受该响应;若不同源,则说明该域名不可跨域,浏览器不接受该响应,并抛出一个错误。

 

浏览器将cors请求分为简单请求和非简单请求

1.简单请求

 

  • 只要同时满足以下三大条件,就属于简单请求。
  1. 请求方法是以下三种方法之一:
    HEAD
    GET
    POST
  2. HTTP的头信息不超出以下几种字段:
    Accept
    Accept-Language
    Content-Language
    Last-Event-ID
  3. Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

 

2.非简单请求

  • 浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。
    • 浏览器否定了"预检"请求,会返回一个正常的HTTP回应,但是没有任何CORS相关的头信息字段。这时,浏览器就会认定,服务器不同意预检请求,因此触发一个错误,被XMLHttpRequest对象的onerror回调函数捕获
    • 一旦服务器通过了"预检"请求,浏览器正常的CORS请求,就都跟简单请求一样,会有一个Origin头信息字段。服务器的回应,也都会有一个Access-Control-Allow-Origin头信息字段。

 

 

踩坑:

低版本浏览器对通配符*的兼容问题导致跨域失败,具体分析:https://juejin.cn/post/7126828512480559111

标签:Control,浏览器,请求,预检,Access,option,cors,服务器,跨域
From: https://www.cnblogs.com/wangxirui/p/16735128.html

相关文章