首页/网络/协议速查/OPTIONS 探测通信选项
HTTP 方法与状态码91 条

OPTIONS 探测通信选项

查询目标资源支持的通信选项,响应通常在 Allow 头中列出支持的方法;也是 CORS 预检请求使用的方法。

协议速查网络更新于 2026-10-13

OPTIONS 是做什么的

OPTIONS 用来询问目标资源支持哪些通信选项,服务器通常把支持的方法列在 Allow 响应头里。这个请求不带请求体、不改变资源状态,属于安全且幂等的方法。跨域场景中浏览器发出的 CORS 预检请求用的也是 OPTIONS,所以它既是接口能力探测手段,也是前端跨域能否走通的前置条件。

基本信息

方法名OPTIONS
作用探测资源支持的通信选项,也是 CORS 预检请求使用的方法
规范RFC 9110 第 9.3.7 节
特性安全且幂等,不修改资源状态
特殊形式OPTIONS * 针对整个服务器而非某个资源

探测与实际预检

探测与实际预检
curl -si -X OPTIONS https://api.example.com/users      # 看 Allow 头与状态码
# HTTP/1.1 204 No Content
# Allow: GET, POST, HEAD, OPTIONS
curl -si -X OPTIONS https://api.example.com/users \
  -H 'Origin: https://app.example.com' \
  -H 'Access-Control-Request-Method: PUT'              # 模拟浏览器预检,看 CORS 头

输出逐列读法

观察项含义正常与异常
Allow该资源支持的方法清单缺失通常说明框架没暴露 OPTIONS 或网关拦截了
状态码本次探测是否被接受204 或 200 正常;404 多为路由未部署;405 说明资源未实现 OPTIONS
Access-Control-Allow-Origin允许的跨域来源带 Origin 请求时缺失该头,浏览器会拦掉真实请求
Access-Control-Allow-Methods预检放行的方法不含真实请求用的方法时,预检直接失败
Access-Control-Max-Age预检结果可缓存秒数配得太短等于每次请求都追加一次预检
OPTIONS * 询问的是整台服务器而不是某个资源,部分实现会直接返回 400;日常排障优先对具体路径发请求。
只有带上 Origin 请求头的 OPTIONS 才会返回 CORS 相关响应头;不带 Origin 时它只是一次普通的能力探测。
在 Kubernetes Ingress、云网关或企业反向代理后面,OPTIONS 经常被网关直接应答,后端应用完全看不到这次请求。排查预检问题时先确认是哪一层回应的,再看那一层的跨域配置,方向才不会跑偏。

易错点

  • 生产环境直接暴露 Allow 全量方法清单,等于给攻击者提供接口指纹,非必要可以只对内网与预检场景开放
  • CORS 预检失败被当成业务接口故障排查,实际是服务端没有正确处理 OPTIONS 或没返回 CORS 响应头
  • 网关或 WAF 把 OPTIONS 当无效请求直接拦截,导致跨域前端全部不可用,应在网关层显式放行预检
  • 预检结果会被浏览器按 Access-Control-Max-Age 缓存,改完服务端跨域配置后短期内仍看到旧行为,验证时应清缓存或用无痕窗口

数据来源与参考

  • RFC 9110 §9.3.7 OPTIONS
  • WHATWG Fetch 标准(CORS 预检)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌