http 跨域时的 options请求

最近在面试过程中,遇到了这个问题,一下懵了,前端常用的有 Get,Post,Put,Delete,Options 请求好像没主动发起过。那么这个请求是什么用途呢?

官方定义:
OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。

出于安全考虑,并不是所有域名都可以访问后端服务。在正式跨域之前,浏览器会根据需要发起一次预检(也就是 OPTIONS 请求),用来让服务端返回允许的方法(如get、post),允许被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。

浏览器将 CORS 分为两类
简单请求 不会进行预检,对于简单请求,浏览器直接请求,会在请求头信息中,增加一个origin字段,来说明本次请求来自哪个源(协议+域名+端口)
同时满足下列三大条件,就属于简单请求,否则属于非简单请求

1.请求方式只能是:GET、POST、HEAD
2.HTTP请求头限制这几种字段:Accept、Accept-Language、Content-Language、Content-Type、Last-Event-ID
3.Content-type取:application/x-www-form-urlencoded、multipart/form-data、text/plain

非简单请求才会进行 options 预检,下图是一个预检请求
http 跨域时的 options请求