1. 预检请求的本质与产生机制
当浏览器检测到某个跨域请求可能对服务器数据产生副作用时(比如使用PUT/DELETE方法,或者Content-Type不是简单请求允许的三种类型),就会自动发起一个OPTIONS预检请求。这个机制是CORS(跨域资源共享)规范的核心组成部分,本质上是一种安全防护措施。
预检请求的工作流程是这样的:
- 浏览器发现当前请求需要预检
- 先发送OPTIONS请求到目标服务器
- 服务器返回允许的HTTP方法、Header等信息
- 浏览器确认实际请求是否符合服务器规则
- 符合则发送真实请求,否则阻断
关键点:预检请求是浏览器行为,开发者无法通过前端代码控制其触发与否
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 触发预检请求的典型场景
2.1 非简单请求方法
- PUT
- DELETE
- PATCH
- CONNECT
- OPTIONS
- TRACE
2.2 自定义请求头
任何不在以下白名单的Header都会触发预检:
- Accept
- Accept-Language
- Content-Language
- Content-Type(仅限特定值)
2.3 特殊Content-Type
只有当Content-Type是以下三种时才不会触发预检:
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
2.4 其他特殊情况
- 请求中带凭据(credentials)
- 使用ReadableStream等特殊对象
3. 预检请求的技术细节解析
3.1 请求头关键字段
预检请求会携带以下特殊Header:
code复制Access-Control-Request-Method: [实际请求方法]
Access-Control-Request-Headers: [自定义头列表]
Origin: [请求来源]
3.2 响应头必备字段
服务器必须正确返回这些Header才能通过预检:
code复制Access-Control-Allow-Origin: [允许的源]
Access-Control-Allow-Methods: [允许的方法]
Access-Control-Allow-Hea
