preflight request预检请求,负责检查是否允许跨域请求,但是注意并不是所有的跨域请求都会发送preflight请求。对与那些幂等的请求,如GET请求,就不会发送preflight请求。只有那些会改变服务器状态的请求才可能发送preflight请求,如果POST、DELETE和PUT请求。
preflight请求是一个OPTIONS请求,由浏览器自动发送,前端开发者不会意识到它的存在。preflight请求必须有这三个请求头Access-Control-Request-Method、Access-Control-Request-Headers和Origin,然后服务器决定是否允许指定的请求方法、请求头和来源。
例如,客户端询问服务端是否支持DELET请求,在发送DELET请求之前,通过使用一个preflight请求
OPTIONS /resource/foo Access-Control-Request-Method: DELETE Access-Control-Request-Headers: origin, x-requested-with Origin: https://foo.bar.org
如果服务允许DELETE请求,然后响应一个Access-Control-Request-Method,其中包含DELETE
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-Max-Age: 86400
预检请求也可以使用缓存,上面的响应就使用Access-Control-Max-Age头设置缓存时间。
原文地址:https://www.cnblogs.com/stronger-brother/p/12079918.html
时间: 2024-10-27 12:01:35