Options请求

Administrator 10 2024-09-21

为什么会发出 OPTIONS 请求?

  • CORS 探测(跨域资源共享):当浏览器尝试从一个域请求另一个域的资源时,如果请求涉及跨域(例如,两个不同的域名、端口或协议),浏览器会自动发起 OPTIONS 请求来探测服务器是否允许跨域请求。这是 CORS(跨域资源共享)机制的一部分,用于确保跨域请求的安全性。

  • 复杂请求的预检:当浏览器发起复杂的 HTTP 请求(如 PUTDELETE、带有自定义头的请求,或非简单的 POST 请求)时,浏览器会首先发出 OPTIONS 请求,以确定服务器是否允许这种复杂请求。这种预检请求是为了避免客户端发出不被允许的复杂请求,从而节省资源和时间。

总结:OPTIONS 预检请求是跨域复杂请求的特有机制(跨域&复杂请求)以确定服务器是否允许这种复杂请求

OPTIONS 请求的作用是什么? 💡

  • 确认服务器跨域策略OPTIONS 请求的主要作用是探测服务器的 CORS 策略。服务器会通过响应 Access-Control-Allow-OriginAccess-Control-Allow-Methods 等头信息来告诉浏览器是否允许跨域请求。

  • 判断复杂请求是否被允许:通过 OPTIONS 请求,浏览器可以确认服务器是否允许某个复杂的请求方法(如 PUTDELETE)以及自定义的请求头。如果服务器允许,浏览器才会继续发送实际请求,否则请求会被浏览器拦截。

什么是复杂请求?

  • 使用了特殊的 HTTP 方法

    • 请求方法不是 GETPOSTHEAD,例如 PUTDELETEPATCH 等。

  • 带有自定义的请求头

    • 请求中使用了不属于标准头的自定义请求头(例如:AuthorizationContent-Type 为除 application/x-www-form-urlencodedmultipart/form-datatext/plain 之外的类型)。

    • 具体的头部包含:Content-Type(非简单类型)、AuthorizationX-Custom-Header等自定义头部。

  • 带有非简单的 Content-Type

    • Content-Type 不属于以下三种之一时,属于复杂请求:

      • application/x-www-form-urlencoded

      • multipart/form-data

      • text/plain