为什么会发出 OPTIONS
请求?
CORS 探测(跨域资源共享):当浏览器尝试从一个域请求另一个域的资源时,如果请求涉及跨域(例如,两个不同的域名、端口或协议),浏览器会自动发起
OPTIONS
请求来探测服务器是否允许跨域请求。这是 CORS(跨域资源共享)机制的一部分,用于确保跨域请求的安全性。复杂请求的预检:当浏览器发起复杂的 HTTP 请求(如
PUT
、DELETE
、带有自定义头的请求,或非简单的POST
请求)时,浏览器会首先发出OPTIONS
请求,以确定服务器是否允许这种复杂请求。这种预检请求是为了避免客户端发出不被允许的复杂请求,从而节省资源和时间。
总结:OPTIONS 预检请求是跨域复杂请求的特有机制(跨域&复杂请求)以确定服务器是否允许这种复杂请求
OPTIONS
请求的作用是什么? 💡
确认服务器跨域策略:
OPTIONS
请求的主要作用是探测服务器的 CORS 策略。服务器会通过响应Access-Control-Allow-Origin
、Access-Control-Allow-Methods
等头信息来告诉浏览器是否允许跨域请求。判断复杂请求是否被允许:通过
OPTIONS
请求,浏览器可以确认服务器是否允许某个复杂的请求方法(如PUT
、DELETE
)以及自定义的请求头。如果服务器允许,浏览器才会继续发送实际请求,否则请求会被浏览器拦截。
什么是复杂请求?
使用了特殊的 HTTP 方法:
请求方法不是
GET
、POST
或HEAD
,例如PUT
、DELETE
、PATCH
等。
带有自定义的请求头:
请求中使用了不属于标准头的自定义请求头(例如:
Authorization
、Content-Type
为除application/x-www-form-urlencoded
、multipart/form-data
和text/plain
之外的类型)。具体的头部包含:
Content-Type
(非简单类型)、Authorization
、X-Custom-Header
等自定义头部。
带有非简单的 Content-Type:
当
Content-Type
不属于以下三种之一时,属于复杂请求:application/x-www-form-urlencoded
multipart/form-data
text/plain