HTTP Options 跨域時發送兩個請求是怎么回事?


在正式的跨域請求之前,我們能在控制台上看到先發送了一個 OPTIONS 請求去詢問服務器是否允許接下來的跨域請求,那么有關於這個 OPTIONS,今天就來介紹一下。

在 OPTIONS 請求里有幾個字段:

  • Origin:發起請求原來的域
  • Access-Control-Request-Method:將要發起的跨域請求方式(GET/PUT/POST/DELETE/······)
  • Access-Control-Request-Headers:將要發起的跨域請求中包含的請求頭字段
  • Access-Control-Max-Age:緩存查詢結果時間。

服務器在響應字段中來表明是否允許這個跨域請求,瀏覽器收到后檢查如果不符合要求,就拒絕后面的請求

  • Access-Control-Allow-Origin:允許哪些域來訪問(*表示允許所有域的請求)
  • Access-Control-Allow-Methods:允許哪些請求方式
  • Access-Control-Allow-Headers:允許哪些請求頭字段
  • Access-Control-Allow-Credentials:是否允許攜帶Cookie

為了避免每次都要詢問,OPTIONS 還做了兩個重要的優化

第一,如果是一個簡單請求,那就直接發起請求,只需在請求中加入 Origin 字段表明自己來源,在響應中檢查 Access-Control-Allow-Origin,如果不符合要求就報錯,不需要再單獨詢問

那簡單請求又是什么?

簡單請求就是請求方式屬於HEAD、GET、POST三者之一,請求頭只有下面這些,不符合要求的就是非簡單請求,就得詢問了

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:(application/x-www-form-urlencoded、multipart/form-data、text/plain)

第二個優化是,Options 請求頭的 Access-Control-Max-Age,它表明了這個詢問結果的有效期,后面瀏覽器在有效期內也可以不必再次詢問

參考

推薦這家的文章,雖然有標題黨嫌疑,但講的的確是通俗易懂。

因為一個跨域請求,我差點丟了飯碗


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM