预检请求
CORS 预检请求是一个 CORS 请求,用于检查 CORS 协议是否被理解,以及服务器是否知晓使用特定的方法和标头。
它是一个 OPTIONS 请求,使用两个或三个 HTTP 请求标头:Access-Control-Request-Method、Origin,以及可选的 Access-Control-Request-Headers。
预检请求由浏览器自动发出,在正常情况下,前端开发者不需要自己构造此类请求。当请求被归类为“需要预检”时,它会出现,而对于简单请求则会省略。
例如,客户端可能会通过预检请求询问服务器是否允许 DELETE 请求,然后再发送 DELETE 请求。
http
OPTIONS /resource/foo
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: x-requested-with
Origin: https://foo.bar.org
如果服务器允许,它将以 Access-Control-Allow-Methods 响应标头来响应预检请求,其中列出了 DELETE。
http
HTTP/1.1 204 No Content
Connection: keep-alive
Access-Control-Allow-Origin: https://foo.bar.org
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Max-Age: 86400
预检响应可以根据使用 Access-Control-Max-Age 标头创建的相同 URL 的请求进行可选缓存,如上面的示例所示。要缓存预检响应,浏览器会使用一个独立的缓存,与浏览器管理的通用 HTTP 缓存是分开的。预检响应永远不会缓存在浏览器的通用 HTTP 缓存中。