一、什么是OPTIONS?
OPTIONS请求方法的主要用途有两个:
- 获取服务器支持的HTTP请求方法;
- 用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。
这是浏览器给我们加上的,后端并没有做任何操作。
二、为什么要用OPTIONS
OPTIONS请求旨在发送一种“探测”请求以确定针对某个目标地址的请求必须具有怎样的约束(比如应该采用怎样的HTTP方法以及自定义的请求报头),然后根据其约束发送真正的请求。比如针对“跨域资源”的预检(Preflight)请求采用的HTTP方法就是OPTIONS。
简而言之,OPTIONS请求方法的主要用途有两个:
- 获取服务器支持的HTTP请求方法;
- 用来检查服务器的性能。
三、什么时候会触发OPTIONS请求?
当请求满足下述任一条件时,即应首先发送预检请求(使用OPTIONS):
- 使用了下面任一 HTTP 方法:
PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH
- 人为设置了对 CORS 安全的首部字段集合之外的其他首部字段。该集合为:
Accept
Accept-Language
Content-Language
Content-Type (but note the additional requirements below)
DPR
Downlink
Save-Data
Viewport-Width
Width
- Content-Type 的值不属于下列之一:
application/x-www-form-urlencoded
multipart/form-data
text/plain
四、关于触发OPTIONS返回200之后却没有触发正式请求的问题
-
查看OPTIONS的reponse headers中Access-Control-Request-Method是否跟后端一开始约定的一样
-
查看OPTIONS的reponse headers中Access-Control-Request-Headers 的自定义headers字段是否跟后端一开始约定的一样
如果有需要也可以看下阮老师的博客:www.ruanyifeng.com/blog/2016/0…