OPTIONS 请求方法及使用场景

了解 OPTIONS 请求方法的作用和在 CORS 跨域中的应用

问题

OPTIONS 请求方法是什么,有哪些使用场景?

解答

OPTIONS 是 HTTP 请求方法之一,用于请求获得指定资源支持的通信选项。通过这个方法,客户端可以在发起实际请求之前,了解服务器的性能或决定采取何种措施。

注意:OPTIONS 请求的响应不能被缓存。

主要用途

1. 获取服务器支持的 HTTP 方法

客户端可以通过 OPTIONS 请求查询服务器支持哪些 HTTP 方法(GET、POST、PUT、DELETE 等)。

2. CORS 预检请求

在跨域资源共享(CORS)场景中,浏览器会自动发送 OPTIONS 预检请求来检查访问权限。当 JavaScript 的 XMLHttpRequest 或 Fetch API 发起复杂请求时(如使用自定义请求头、非简单请求方法等),浏览器会先发送 OPTIONS 请求,判断是否有权限访问目标资源。

// 浏览器自动发送的 OPTIONS 预检请求示例
// Request Headers
OPTIONS /api/data HTTP/1.1
Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type

// Response Headers
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age: 86400

相关 HTTP 头字段

通用首部字段(请求和响应都可使用):

  • Cache-Control:控制缓存机制和类型
  • Connection:控制是否保持持久连接
  • Transfer-Encoding:指定传输编码方式

CORS 相关头字段:

  • Access-Control-Allow-Origin:允许访问的源
  • Access-Control-Allow-Methods:允许的 HTTP 方法
  • Access-Control-Allow-Headers:允许的请求头
  • Access-Control-Max-Age:预检请求结果的缓存时间

关键点

  • OPTIONS 用于查询服务器支持的功能选项,响应不可缓存
  • CORS 跨域时,浏览器会自动发送 OPTIONS 预检请求检查权限
  • 预检请求通过后,浏览器才会发送实际的业务请求
  • Access-Control-Max-Age 可以设置预检结果的缓存时间,减少重复请求