关键词:预检请求
当看到 method 为 OPTIONS
的请求时,这是一个 HTTP OPTIONS 请求。OPTIONS 请求是 HTTP/1.1 协议中定义的一种方法,用于获取目的资源(服务器)支持的通信选项。这种请求主要被用于 CORS(Cross-Origin Resource Sharing,跨域资源共享)预检请求,在真正的跨域请求被发送之前执行。
作用和目的
- 确定服务器的支持性:客户端通过发送一个 OPTIONS 请求来确定服务器支持的 HTTP 方法(如 GET、POST、DELETE 等)。
- CORS 预检请求:在发送实际的跨域请求前,浏览器会自动发出一个 OPTIONS 预检请求,询问目标资源的服务器是否允许该跨域请求。这个步骤用来确保安全,避免非法站点调用敏感资源。
CORS 预检请求内容
在 CORS 上下文中,OPTIONS 请求会包含一些 HTTP 头,指明了实际请求将会使用哪些 HTTP 方法和头部。服务器响应该请求时会指明允许的方法、头部和是否允许带有凭证的请求(如 Cookies)。重要的 HTTP 头包括:
-
Access-Control-Request-Method
:在预检请求中,这个头部告诉服务器实际请求将使用的 HTTP 方法是什么。 -
Access-Control-Request-Headers
:当实际请求中需要携带额外的头部时,这个字段会列出它们。 -
Access-Control-Allow-Methods
:在响应中,这个头部告诉客户端服务器允许的方法。 -
Access-Control-Allow-Headers
:在响应中,这个头部告诉客户端服务器允许的头部。 -
Access-Control-Allow-Origin
:这个头部指明了哪些源可以访问该资源。如果服务器支持请求的源,则会在响应中包含这个头部。
示例
当您的 Web 应用尝试从另一个域名(源)的服务器获取资源时,浏览器会首先发起一个 OPTIONS 请求。例如,如果您的前端应用运行在 http://example.com
并尝试通过 AJAX 请求 http://api.example.com/data
,浏览器会先发送 OPTIONS 请求到 http://api.example.com/data
。服务器响应该请求后,如果允许此类请求,则浏览器会继续发起实际的 GET/POST/等请求;如果不允许,则停止请求。
总的来说,OPTIONS 请求是 HTTP 规范的一部分,它是 CORS 预检机制中非常重要的一步,用于在实际跨域请求发出之前确定通信的可能性和条件。