fetch发送2次请求的原因
面对这个问题,需要先理解三个点:
1. 状态码204:当服务器返回这个状态码时,就表示服务器已经成功收到请求,但是没有数据。对应到浏览器,不会刷新界面,也不会导向新界面。当我们只关注于请求是否成功,而无所谓返回数据时,就可以借助204状态码,省掉了多余的数据传输,从而节省开销。
2. OPTION请求:属于请求中的复杂请求,该类请求有一个特点,在正式发送请求之前,都会先发送一个请求,进行一个预检查,简称:预检请求。
3. 预检请求:可以向服务器请求权限信息,也可以获取目的资源所支持的通信选项(例如:检查HTTP请求方法),还可以用来检查服务器性能。
当你掌握了这三点,关于“fetch发送两次请求”的问题自然也就迎刃而解了。
答案就是当使用fetch发送POST请求时,会先发送一个OPTION请求进行预检查,用来获知服务端是否允许该跨域请求,服务器确认允许之后会返回204状态码,表示允许该跨域请求,这时才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)