项目开发中,前后端分离已经是常态,前端在请求后台接口时,由于原生的XMLHttpRequest对象请求方式繁琐而被摒弃,而更多地我们选择ajax

不知道大家有没有发现我们在通过ajax发起请求时,有时明明只发起了一个请求,但是network中会看到两条请求,一开始我发现了这个问题但是没有注意,直到今天因为这个请求导致异常,才搞懂多的这个请求是怎么来的

首先我们可以在network中看到多的这个请求类型为perflight(预检),所以,为什么要预检呢?这是因为我们在开发中,可能会设置ajax请求头,而对于自定义请求头,如果服务端没有进行相应处理,往往会导致请求跨域,所以当ajax发现请求有自定义请求头时,便会通过这么一个预检请求(请求类型为options),检查一下当前请求是否存在跨域问题,如果存在跨域问题,便不会发起真正的获取数据的请求,如果不存在跨域问题,预检请求返回状态204,随后ajax发起正式的数据请求

此处需要特别注意的是,对于增量请求数据的接口来说,因为数据是一次性请求,所以预检请求如果判断不存在跨域问题,状态一定要是204而不能是200,当状态是200时,数据会返回到预检请求的结果中,但是前端拿不到预检请求的结果,导致请求数据异常。

更多推荐

ajax请求之预检请求(preflight请求、options请求)