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可以设置预检结果的缓存时间,减少重复请求
目录