工作中配置监控报警参数时,发现请求接口是有两次。第一个是preflight请求,第二个是正常请求,如图:观察preflight方法是options,然后是正常的请求(post)
因此了解下什么是preflight,前因后果。
正常浏览器禁止跨域访问,通常有两种方案:
- 禁止发出请求
- 拦截请求的返回
针对后者,如果请求已经发出,server端已经做了处理(比如,更新了db),拦截返回后,会导致客户端以为请求没发出,实际服务端已经做了修改,不符合认知。因此有了预检请求。
浏览器判断需要cors(cross-origin-)跨域请求时,主动发起的预检请求,返回成功了,才会发送真实的请求。
参考:https://blog.p2hp.com/archives/9282
什么是preflight请求?
preflight,一个cors预检请求,属于options请求。该请求会在浏览器认为即将要执行的请求可能会对服务器造成不可预知的影响时,由浏览器自动发出。
利用预检请求,浏览器能够知道当前的服务器是否允许执行即将要进行的请求,只有获得了允许,浏览器才会真正执行接下来的请求。
所以,总结有几点:
浏览器自动发出该请求,不需要用户干预
该请求发生在用户发送的请求之前,只有预检请求通过,用户发送的请求才能发送到服务器,否则抛出CORS错误。