1. 检测服务器所支持的请求方法
可以使用 OPTIONS 方法对服务器发起请求,响应报文包含一个 Allow 首部字段,该字段的值表明了服务器支持的所有 HTTP 方法
2. CORS 中的预检请求
在 CORS(跨域资源共享) 中,可以使用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。预检请求报文中的 Access-Control-Request-Method
首部字段告知服务器实际请求所使用的 HTTP 方法;Access-Control-Request-Headers
首部字段告知服务器实际请求所携带的自定义首部字段。服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。
3. 简单请求与复杂请求
某些请求不会触发 CORS 预检请求。我们称这样的请求为“简单请求”。若请求满足所有下述条件,则该请求可视为“简单请求”:
- 使用下列方法之一:
GET
HEAD
POST
- Fetch 规范定义了对 CORS 安全的首部字段集合(Headers),不得人为设置该集合之外的其他首部字段。该集合为:
Accept
Accept-Language
Content-Language
Content-Type
(需要注意额外的限制)
Content-Type
的值仅限于下列三者之一:text/plain
multipart/form-data
application/x-www-form-urlencoded
可以简单的理解,简单请求以外的请求就是复杂请求。
请注意,复杂请求会发出OPTIONS预检请求,并只携带设置的headers字段,而不会携带这些字段具体的值。因此服务器获取不到headers字段的值,应该先通过这次请求,才能接收到真实的请求。
此外,真实的请求依然需要服务器配置相关的跨域设置。