美文网首页webpack
options预请求

options预请求

作者: _hider | 来源:发表于2021-06-02 15:05 被阅读0次

最近开发过程中,为了避免跨域,于是在服务端添加了Access-Control-Allow-Origin,前端出现一个小异常,每次请求次数都是2次,第一次请求的methodsoptions,第二次才是正式的请求。每个接口请求2次很浪费资源,百度了下,这个请求叫做预请求,现在就来学习下。

一、什么是预请求?

跨域请求资源时浏览器为确认请求来源的安全性,会在正式的请求之前做一次预校验请求,待服务器允许之后才能发送正式的请求,这个预校验请求就是options请求。

并不是每次跨域资源请求都会发送options请求,当跨域请求为简单请求的时就不会发送预校验请求,当跨域请求为复杂请求时才会发送预校验请求。

什么是简单请求?

  1. 请求方式只能是:GETPOSTHEAD
  2. HTTP请求头限制这几种字段:AcceptAccept-LanguageContent-LanguageContent-TypeLast-Event-ID
  3. Content-type只能取:application/x-www-form-urlencodedmultipart/form-datatext/plain

如果不满足以上条件的就是非简单请求。

二、如何避免预请求?

预请求是浏览器的一种安全策略,但是它的存在给会占用浏览器的资源,影响页面的性能,所以要尽可能的减少options请求。而方法也很简单,使用简单请求即可:

注意以下几点:

  1. 而在日常开发中,比如Axios里面默认的content-typeapplication/json,这就需要将content-type修改成application/x-www-form-urlencoded即可。
  2. 如果是post请求的话,需要对参数做个处理,需要引用qs库,将qs.stringify将参数序列化进行传参。

如果以上没问题,但是还是有预请求的话,需要查看header里是否设置了其他参数,因为在项目开发中经常会将token放到header里进行传参,这种场景需要后端使用Access-Control-Max-Age

Access-Control-Max-Age的作用
用来指定本次预检请求的有效期,单位为秒,这样只有在第一次请求的时候会有options ,之后浏览器会从缓存里读取响应,也就不会再发送options请求。
Access-Control-Max-Age0表示每次异步请求都发起预检请求,也就是说,发送两次请求。
Access-Control-Max-Age1800表示隔30分钟才发起预检请求。

相关文章

  • options预请求

    最近开发过程中,为了避免跨域,于是在服务端添加了Access-Control-Allow-Origin,前端出现一...

  • options预检请求

    第一次看到这个词, 完全不知道是什么!如果你也和我一样,请继续往下看。当采用CORS(跨域资源共享)来解决跨域问题...

  • options预检请求

    起因  最近写项目的时候,发现前端中的请求发送了两遍,同时也看到了options请求。 前置知识 HTTP常见的请...

  • AJAX出现两次请求 options和get|post

    跨域请求 允许跨域请求 preflighted request预请求(options) 跨域请求 XMLHttpR...

  • 关于浏览器预检(OPTIONS)请求

    浏览器在什么情况下会发起options预检请求? 在非简单请求且跨域的情况下,浏览器会发起options预检请求。...

  • CORS 比较详细的说明

    一个CORS请求的流程 发送一个预检请求都为Options请求,因为Options请求不会对服务器做出任何改动。且...

  • Javascript基础知识5点(2019.1.29)

    1、什么是 options 请求?在正式跨域之前,浏览器会根据需要发起一次预检请求(即 options 请求),用...

  • 简单请求和非简单请求2

    简单请求和非简单请求2 1、OPTIONS预检命令操作 (1)后端服务增加预检命令缓存 如果每个postJson请...

  • 为什么会有OPTIONS请求

    Options 请求,我所了解的就是在发起跨域的非简单请求时,会先发起一个 options 预检请求(浏览器是自动...

  • jquery.ajax,vue-resource,axios拦截

    ajax预过滤器(发送请求前设置): $.ajaxPrefilter(function( options, ori...

网友评论

    本文标题:options预请求

    本文链接:https://www.haomeiwen.com/subject/aybpsltx.html