浏览器中简单请求和复杂请求的区别

177 阅读1分钟

前言

🙋‍♂️ 知其然,更知其所以然,举一反三,融会贯通

浏览器中网络请求在前端开发过程中是再常见不过了,调用接口获取后端数据,然后界面渲染,但是这个过程中浏览器对不同的场景会有特定的处理,首先我们得了解两个概念:简单请求复杂请求

简单请求

简单请求的定义,需满足以下条件:

  • 请求类型为:get/head/post

  • 除了以下请求头字段外,没有自定义请求头

    • Accept
    • Accept-Language
    • Content-Lanauge
    • Content-Type:值只能是application/x-www-form-urlencode,text/plain, multipart/form-data三者之一
    • Last-Event-ID
    • DPR
    • Downlink
    • Save-Data
    • Viewport-Width
    • Width

复杂请求

对于复杂请求,恰好与简单请求相反,只要不满足简单请求条件的,就是复杂请求,它们不同之处在于

  • 复杂请求会比简单请求多发送一个请求,称为预检请求(options),

微信图片_20230208123658.png

  • 预检请求通过后,浏览器才会再次发送真实的请求,否则浏览器是提示报错

微信图片_20230208123427.png

只有在跨域的场景下的复杂请求,才会触发预检请求,发送的options预检请求,只包含头部信息,不包括请求体和自定义请求头,也不会有响应体返回