前言
🙋♂️ 知其然,更知其所以然,举一反三,融会贯通
浏览器中网络请求在前端开发过程中是再常见不过了,调用接口获取后端数据,然后界面渲染,但是这个过程中浏览器对不同的场景会有特定的处理,首先我们得了解两个概念:简单请求 和 复杂请求
简单请求
简单请求的定义,需满足以下条件:
-
请求类型为: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),
- 预检请求通过后,浏览器才会再次发送真实的请求,否则浏览器是提示报错
只有在跨域的场景下的复杂请求,才会触发预检请求,发送的options预检请求,只包含头部信息,不包括请求体和自定义请求头,也不会有响应体返回