跨域中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
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,都會對服務器數據進行修改,所以在請求之前都要先詢問服務器,當前網頁所在域名是否在服務器的許可名單中,服務器允許后,瀏覽器才會發出正式的請求,否則不發送正式請求。