options | options 请求就是预检请求,可用于检测服务器允许的 http 方法。当发起跨域请求时,由于安全原因,触发一定条件时浏览器会在正式请求之前自动先发起 OPTIONS 请求,即 CORS 预检请求,服务器若接受该跨域请求,浏览器才继续发起正式请求。 |
原因 | 当发起跨域请求时,简单请求只发起一次请求;复杂请求则需要2次,先发起options请求,确认目标资源是否支持跨域,浏览器会根据服务端响应的header自动处理剩余的请求,如果响应支持跨域,则继续发出正常请求;不支持的话,会在控制台显示错误。所以,当触发预检时,跨域请求便会发送2次请求,增加请求次数,同时,也延迟了请求真正发起的时间,会严重地影响性能。 |
请求区别 | 某些请求不会触发CORS预检请求,这样的请求一般称为 “简单请求” ,而会触发预检的请求则是 “复杂请求” 。 |
简单请求 | 请求方式为GET、HEAD、POST时的请求; |
| 认为设置规范集合之内的首部字段,如Accept/Accept-Language/Content-Language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width; |
| Content-Type 的值仅限于下列三者之一,即application/x-www-form-urlencoded、multipart/form-data、text/plain; |
| 请求中的任意 XMLHttpRequestUpload对象均没有注册任何事件监听器; |
| 请求中没有使用 ReadableStream对象。 |
复杂请求 | PUT/DELETE/CONNECT/OPTIONS/TRACE/PATCH; |
| 人为设置了以下集合之外首部字段,即简单请求外的字段; |
| Content-Type 的值不属于下列之一,即application/x-www-form-urlencoded、multipart/form-data、text/plain。 |