什么是options请求?
- 官方解释:用于获取目的资源所支持的通信选项。
用于检测服务端对接口等资源的支持情况,包括各种请求方法、头部的支持情况,仅作查询使用
options请求有什么特点
选项 | 有/无 | 说明 |
---|---|---|
Request has body | No | 没有请求体 |
Successful response has body | No | 成功的响应没有响应体 |
Safe | Yes | 安全 |
Idempotent | Yes | 密等性,不变性,同一个接口请求多少次都一样 |
Cacheable | No | 不能缓存 |
Allowed in HTML forms | No | 不能在表单里使用 |
什么时候有options请求
首先我们要了解 XMLHttpRequest 是遵守同源策略的,当我们需要请求的资源与本资源所在服务器不同的域、协议和端口时,我们就会发起一个跨域http请求。
规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。
跨域请求分为两种:简单请求和预测请求,简单请求不会触发options请求
当请求满足下述任一条件时,即应首先发送预检请求:
-
使用了下面任一 HTTP 方法:
- PUT
- DELETE
- CONNECT
- OPTIONS
- TRACE
- PATCH
-
有自定义请求头
-
Content-Type 的值不属于下列之一:
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
-
请求中的XMLHttpRequestUpload 对象注册了任意多个事件监听器。
-
请求中使用了ReadableStream对象。
网友评论