跨域中option請求詳解


跨域中option請求詳解

一、總結

一句話總結:

在正式跨域的請求前,瀏覽器會根據需要,發起一個“PreFlight”(也就是Option請求),用來讓服務端返回允許的方法(如get、post),被跨域訪問的Origin(來源,或者域),還有是否需要Credentials(認證信息)

 

 

1、為什么會出現options請求?

跨域請求中,options請求是瀏覽器自發起的preflight request(預檢請求),以檢測實際請求是否可以被瀏覽器接受。

 

 

2、跨域請求分兩種:簡單請求、復雜請求,這兩種請求都會發起preflight request么?

當跨域請求是簡單請求時不會進行preflight request,只有復雜請求才會進行preflight request。

 

 

3、跨域請求分兩種:簡單請求、復雜請求,那么什么樣的請求才是復雜請求?

1、使用方法put或者delete;
2、發送json格式的數據(content-type: application/json)
3、請求中帶有自定義頭部;

 

4、為什么跨域的復雜請求需要preflight request?

復雜請求可能對服務器數據產生副作用。例如delete或者put,都會對服務器數據進行修改,所以在請求之前都要先詢問服務器,當前網頁所在域名是否在服務器的許可名單中,服務器允許后,瀏覽器才會發出正式的請求,否則不發送正式請求。

 

 

 

二、跨域中option請求詳解

轉自或參考:跨域中option請求詳解
https://www.cnblogs.com/zhaodagang8/p/11275685.html

在正式跨域的請求前,瀏覽器會根據需要,發起一個“PreFlight”(也就是Option請求),用來讓服務端返回允許的方法(如get、post),被跨域訪問的Origin(來源,或者域),還有是否需要Credentials(認證信息)
 
三種場景:
1. 如果跨域的請求是Simple Request(簡單請求 ),則不會觸發“PreFlight”。Mozilla對於簡單請求的要求是:
以下三項必須都成立:
1. 只能是Get、Head、Post方法
2. 除了瀏覽器自己在Http頭上加的信息(如Connection、User-Agent),開發者只能加這幾個:Accept、Accept-Language、Content-Type、。。。。
3. Content-Type只能取這幾個值:
  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/plain

一、為什么會出現options請求呢?

 跨域請求中,options請求是瀏覽器自發起的preflight request(預檢請求),以檢測實際請求是否可以被瀏覽器接受。

preflight request請求報文中有兩個需要關注的首部字段:

(1)Access-Control-Request-Method:告知服務器實際請求所使用的HTTP方法;

(2)Access-Control-Request-Headers:告知服務器實際請求所攜帶的自定義首部字段。

同時服務器也會添加origin header,告知服務器實際請求的客戶端的地址。服務器基於從預檢請求獲得的信息來判斷,是否接受接下來的實際請求。

服務器所返回的Access-Control-Allow-Methods首部字段將所有允許的請求方法告知客戶端,返回將所有Access-Control-Request-Headers首部字段將所有允許的自定義首部字段告知客戶端。此外,服務器端可返回Access-Control-Max-Age首部字段,允許瀏覽器在指定時間內,無需再發送預檢請求,直接用本次結果即可。

在我們開發過程中出現的瀏覽器自發起的options請求就是上面的第二種情況。實際上,跨域請求中的”復雜請求”發出前會進行一次方法是options的preflight request。

二、當跨域請求是簡單請求時不會進行preflight request,只有復雜請求才會進行preflight request。

跨域請求分兩種:簡單請求、復雜請求;

符合以下任一情況的就是復雜請求:

1.使用方法put或者delete;

2.發送json格式的數據(content-type: application/json)

3.請求中帶有自定義頭部;

除了滿足以上條件的復雜請求其他的就是簡單請求嘍!

三、為什么跨域的復雜請求需要preflight request?

復雜請求可能對服務器數據產生副作用。例如delete或者put,都會對服務器數據進行修改,所以在請求之前都要先詢問服務器,當前網頁所在域名是否在服務器的許可名單中,服務器允許后,瀏覽器才會發出正式的請求,否則不發送正式請求。

 


免責聲明!

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



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