目录
- 一、什么是OPTIONS请求?
- 二、简单请求、复杂请求
- 三、特定的请求头、响应头
一、什么是OPTIONS请求?
OPTIONS
请求方式是 HTTP 协议中的一种,主要用于 从响应头中获取服务器支持的HTTP请求方式。
- OPTIONS 请求方式是
浏览级行为
,当请求存在跨域时,根据浏览器的同源策略,浏览器会对ajax
请求发送 OPTIONS 请求进行预检查。 - 一般只限制 ajax 请求,不会限制 link、img、script、iframe 请求。
- 服务器后端之间的跨域请求时不用发 OPTIONS 请求的。
OPTIONS请求特性:
没有请求体
;没有响应体
;安全
;幂等性
;(同一个接口请求多少次都一样)不能缓存
;不能在表单里面使用
。
二、简单请求、复杂请求
某些请求不会触发 CORS 预检请求,这样的请求一般称为
简单请求
,而会触发预检的请求则是复杂请求
。
简单请求:
(以下条件需全部满足)
-
请求方式: GET、HEAD、POST。
-
设置规范集合之内的首部字段,如:Accept、Accept-Language、Content-Language、Content-Type、DPR、Downlink、Save-Data、Viewport-Width、Width。
-
Conten-Type 的值仅限于下列三者之一,即:
application/x-www-form-urlencoded
、multipart/form-data
、text/plain
。(注意:如果 GET、POST 请求使用了
Content-Type: application/json
、token类
的请求头,也会触发 OPTIONS 请求预检) -
请求中的任意 XMLHttpRequestUpload 对象均没有注册任何事件监听器。
-
请求中没有使用 ReadableStream 对象。
复杂请求:
(以下条件满足任意一项)
- 请求方式:PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH。
- 人为设置了简单请求之外的首部字段。
- Content-Type 的值不属于下列三者之一:application/x-www-form-urlencoded、multipart/form-data、text/plain。
三、特定的请求头、响应头
特定的请求头:
-
Access-Control-Request-Method
:告知服务器,实际请求将使用的请求方式(如:GET、POST等)。例如:Access-Control-Request-Method: GET
-
Access-Control-Request-Headers
:告知服务器,实际请求将携带的自定义请求首部字段。例如:Access-Control-Request-Headers: token
特定的响应头:
-
Access-Control-Allow-Methods
:允许客户端使用的请求方式。例如:Access-Control-Allow-Methods: PUT
-
Access-Control-Allow-Origin
:允许跨域请求的域名,如果要允许所有域名则设置为 *。例如:Access-Control-Allow-Origin: http://localhost:8080
-
Access-Control-Allow-Headers
:允许请求携带的请求头。例如:Access-Control-Allow-Headers: token, Origin
-
Access-Control-Allow-Credentials
:是否允许携带 cookie。例如:Access-Control-Allow-Credentials: true
-
Access-Control-Max-Age
:指定了预检请求的结果能够被缓存多久,即多久发送一次OPTIONS请求。例如:Access-Control-Max-Age: 60(1分钟内不再发 options 请求)
整理完毕,完结撒花~🌻
参考地址:
1.什么是options请求?为什么会有options请求?https://blog.csdn.net/gwdgwd123/article/details/100554117