预检请求

CORS 预检请求是 CORS 请求,用于检查服务器是否了解 CORS 协议并使用特定的方法和标头。

它是一个 OPTIONS 请求,使用两个或三个 HTTP 请求标头:Access-Control-Request-MethodOrigin,以及可选的 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 缓存中。

另请参阅