预检请求
CORS 预检请求用于检查服务器是否支持 CORS 协议,并且是否允许使用特定的方法和标头。
浏览器会自动发送 OPTIONS 预检请求,主要在以下情况下:
- 使用了非简单请求(即非
GET、POST(仅限application/x-www-form-urlencoded、multipart/form-data、text/plain)、HEAD)。 - 设置了自定义请求头(如
Authorization、Content-Type: application/json)。 - 跨域请求涉及 credentials(如
withCredentials: true)。 - 使用了 PUT、DELETE、PATCH 等方法。
服务器正常响应 options 请求
res.set({
"Access-Control-Allow-Origin": "*", // 允许的来源
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", // 允许的方法
"Access-Control-Allow-Headers": "Content-Type, Authorization", // 允许的请求头
"Access-Control-Allow-Credentials": "true", // 允许携带 Cookie
});
总结
- 浏览器会自动发送
OPTIONS预检请求来检查 CORS 规则。 - 服务器需要正确返回
Access-Control-Allow-Origin等 CORS 头信息。 - 通过使用简单请求、避免自定义头,可以减少
OPTIONS预检请求的触发。