POST请求为什么需要执行两次

发布时间 2023-12-18 17:48:34作者: 使用D

前端POST请求服务端接口时,为什么需要执行两次?

 

第一次:

General

Request Method:OPTIONS
Status Code:204 No Content

Response Headers

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:access-control-allow-methods,authorization,content-type
Access-Control-Allow-Methods:GET,HEAD,PUT,POST,DELETE,PATCH
Access-Control-Allow-Origin:https://xxxxxxxxx.com
Date:Mon, 18 Dec 2023 09:24:21 GMT
Strict-Transport-Security:max-age=15724800; includeSubDomains
Vary:Origin

作用:

1、复杂请求

请求中有自定义HTTP头部,所谓的自定义头部,在实际的项目里,我们经常会遇到需要在header头部加上一些token或者其他的用户信息,用来做用户信息的校验。

只要是带自定义header的跨域请求,在发送真实请求前都会先发送OPTIONS请求,浏览器根据OPTIONS请求返回的结果来决定是否继续发送真实的请求进行跨域资源访问。所以复杂请求肯定会两次请求服务端。

 

2、发生了跨域。

在跨域请求中,浏览器为了确保安全,会首先发送一个OPTIONS请求,也被称为预检请求。如果预检请求成功,浏览器才会发出实际的POST请求。

 

options请求有什么作用:

官方将头部带自定义信息的请求方式称为带预检(preflighted)的跨域请求。在实际调用接口之前,会首先发出一个options请求,检测服务端是否支持真实的请求进行跨域的请求。