引自: http的請求方式,包括options、get、head、post、put、delete、trace和connect等八種請求方式。其中,get與post只是我們最常用的請求方式。
options請求的官方定義:options方法是用於請求獲得由request-uri標識的資源在請求/響應的通訊過程中可以使用的功能選項。通過這個方法,客戶端可以在採取具體資源請求之前,決定對該資源採取何種必要措施,或者了解伺服器的效能。
也說就是:在發生正式的請求之前,先進行一次預檢請求。看服務端返回一些資訊,瀏覽器拿到之後,看後台是否允許進行訪問。
原因:
客戶端傳送了複雜請求。複雜請求對應簡單請求。
客戶端的請求跨域。
簡單請求:
請求方法只能是get或head或者post。
請求頭沒有自定義http頭部。請求頭限制這幾種字段:accept、accept-language、content-language、content-type、last-event-id。
官方將頭部帶自定義資訊的請求方式稱為帶預檢(preflighted)的跨域請求。在實際呼叫介面之前,會首先發出乙個options請求,檢測服務端是否支援真實的請求進行跨域的請求。真實請求在options請求中,通過request-header將 access-control-request-headers與access-control-request-method傳送給後台,另外瀏覽器會自行加上乙個origin請求位址。服務端在接收到預檢請求後,根據資源許可權配置,在response-header頭部加入access-control-allow-headers(允許跨域請求的請求頭)、access-control-allow-methods(允許跨域請求的請求方式)、access-control-allow-origin(允許跨域請求的域)。另外,服務端還可以通過access-control-max-age來設定一定時間內無須再進行預檢請求,直接用之前的預檢請求的協商結果即可。瀏覽器再根據服務端返回的資訊,進行決定是否再進行真實的跨域請求。這個過程對於使用者來說,也是透明的。
另外在http響應頭,凡是瀏覽器請求中攜帶了身份資訊,而響應頭中沒有返回access-control-allow-credentials: true的,瀏覽器都會忽略此次響應。
總結:只要是帶自定義header的跨域請求,在傳送真實請求前都會先傳送options請求,瀏覽器根據options請求返回的結果來決定是否繼續傳送真實的請求進行跨域資源訪問。所以複雜請求肯定會兩次請求服務端。也就是說,瀏覽器會先詢問伺服器,當前網頁所在網域名稱是否在伺服器的許可名單之中,伺服器允許之後,瀏覽器才會發出正式的xmlhttprequest請求,否則會報錯。
使用**,避開跨域。
將複雜跨域請求更改為簡單跨域請求。
不使用帶自定義配置的header頭部。
後端解決,設定不進行options預檢。
HTTP的請求方法OPTIONS
http請求方法並不是只有get和post,只是最常用的。據rfc2616標準 現行的http 1.1 得知,通常有以下8種方法 options get head post put delete trace和connect。options方法是用於請求獲得由request uri標識的資源在請求 響...
HTTP的請求方法OPTIONS
http請求方法並不是只有get和post,只是最常用的。據rfc2616標準 現行的http 1.1 得知,通常有以下8種方法 options get head post put delete trace和connect。options方法是用於請求獲得由request uri標識的資源在請求 響...
HTTP的請求方法OPTIONS
http請求方法並不是只有get和post,只是最常用的。據rfc2616標準 現行的http 1.1 得知,通常有以下8種方法 options get head post put delete trace和connect。options方法是用於請求獲得由request uri標識的資源在請求 響...