什么是復雜請求?
1、非head、get、post請求方法;
2、Content-Type 的值不屬於下列之一:application/x-www-form-urlencoded、multipart/form-data、text/plain;
3、人為設置了以下集合之外首部字段:Accept/Accept-Language/Content-Language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width;
什么是預請求?
對那些可能對服務器數據產生副作用的 HTTP 請求方法(特別是 GET 以外的 HTTP 請求,或者搭配某些 MIME 類型的 POST 請求),瀏覽器必須首先使用 OPTIONS 方法發起一個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求。服務器基於從預檢請求頭部獲得的信息來判斷,是否接受接下來的實際請求。
預檢請求頭request header的關鍵字段
Access-Control-Request-Method:告訴服務器實際請求所使用的 HTTP 方法
Access-Control-Request-Headers:告訴服務器實際請求所攜帶的自定義首部字段,本次實際請求首部字段中content-type為自定義
預檢響應頭response header的關鍵字段:
Access-Control-Allow-Methods:返回了服務端允許的請求,包含GET/HEAD/PUT/PATCH/POST/DELETE
Access-Control-Allow-Credentials:允許跨域攜帶cookie(跨域請求要攜帶cookie必須設置為true)
Access-Control-Allow-Origin:允許跨域請求的域名,這個可以在服務端配置一些信任的域名白名單
Access-Control-Request-Headers:客戶端請求所攜帶的自定義首部字段content-type
優化OPTIONS請求
Access-Control-Max-Age這個響應首部表示 preflight request (預檢請求)的返回結果(即 Access-Control-Allow-Methods 和Access-Control-Allow-Headers 提供的信息) 可以被緩存的最長時間,單位是秒。(MDN)
