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頭設置緩存時間。