每日一题:如何理解预检请求preflight

427 阅读1分钟

1、什么是preflight请求?

一个 CORS 预检请求是用于检查服务器是否支持 CORS 即跨域资源共享。

2、什么时候会发送preflight请求?

总结:跨域请求中的非简单请求都会进行发送preflight请求

对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求

3、preflight请求的作用?

检查服务器是否支持 CORS 即跨域资源共享。

案例

leetcode官网发送的某一个预检请求

image.png

请求标头

image.png

Access-Control-Request-Method: POST
Origin: leetcode.cn
Access-Control-Request-Headers: x-timezone
告诉服务端真是请求的请求来源、请求方式、特殊的请求头。

响应标头

image.png

Access-Control-Allow-Headers: Origin,Content-Length,Content-Type,X-Csrftoken,X-Timezone
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE,UPDATE
Access-Control-Allow-Origin: leetcode.cn
Access-Control-Max-Age: 43200 (单位为秒,默认5)

告诉客户端允许的请求地址、请求方式、请求头、该预检请求可供缓存的时间 缓存的时间内无需再次发送预检请求

预检通过后,会发送真实请求

image.png