什么是options請求,簡單的說就是可以用 options 請求去嗅探某個請求在對應的服務器中都支持哪種請求方法。
一般我們不會自己手動的去觸發options請求,一般都是瀏覽器自動去完成處理的。當產生一些跨域的情況下,發起復雜請求時,對那些可能對數據庫數據產生副作用的請求時。瀏覽器會首先發送一個options請求,得到服務端許可的后才會發送真實的請求。
簡單請求
簡單請求不會觸發options預請求,簡單請求:
- 請求方式為GET、POST、HEAD
- Content-type的值為application/x-www-form-urlencoded、multipart/form-data、text/plain三個中的某一個
- 人為設置了規范集合之內的請求頭字段,如Accept/Accept-Language/Content-Language/Content-Type/DPR/Downlink/Save-Data/Viewport-Width/Width
復雜請求
- 使用除開簡單請求方式外的請求
- 設置了非規定的集合之內的請求頭字段,比如經常自定義了token、user等
- Content-type的值不屬于application/x-www-form-urlencoded、multipart/form-data、text/plain
options請求頭關鍵字段
Access-Control-Request-Method: POST // 通知服務器,真實請求將采用POST
Access-Control-Request-Header: token, Content-type // 通知服務器,真實請求攜帶的自定義頭部字段
options返回頭關鍵字段
Access-Control-Allow-Methods 服務器運行客戶端使用什么請求方式
Access-Control-Allow-Origin 允許跨域的域名,允許所以跨域這個只為*
Access-Control-Max-Age 預請求能夠緩存多久
Access-Control-Request-Headers 將實際請求所攜帶的首部字段告訴服務器
options優化
如果所有接口都使用options請求,會增加請求次數,延遲真實請求發起時間,影響性能
- 把一些不要的復雜請求轉為簡單請求
- 設置options緩存 Access-Control-Max-Age 字段
小結
options請求就是一個預請求,可用于檢測服務器允許的 http 方法。為了安全瀏覽器會發起options(CORS)預檢請求,服務器同意后,客戶端才發送真實請求