Http中的options請求


引自:https://www.jianshu.com/p/5cf82f092201、https://www.cnblogs.com/mamimi/p/10602722.html

一、options是什么

​ http的請求方式,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT等八種請求方式。其中,get與post只是我們最常用的請求方式。

options請求的官方定義:OPTIONS方法是用於請求獲得由Request-URI標識的資源在請求/響應的通信過程中可以使用的功能選項。通過這個方法,客戶端可以在采取具體資源請求之前,決定對該資源采取何種必要措施,或者了解服務器的性能。

也說就是:在發生正式的請求之前,先進行一次預檢請求。看服務端返回一些信息,瀏覽器拿到之后,看后台是否允許進行訪問。

二、為什么會產生options請求

原因:

  1. 客戶端發送了復雜請求。復雜請求對應簡單請求。
  2. 客戶端的請求跨域。

簡單請求:

  1. 請求方法只能是GET或HEAD或者POST。
  2. 當請求方法是POST時,Content-Type必須是application/x-www-form-urlencoded、multipart/form-data、text/plain中的一個值。
  3. 請求頭沒有自定義HTTP頭部。請求頭限制這幾種字段:Accept、Accept-Language、Content-Language、Content-Type、Last-Event-ID。

三、options請求的作用

官方將頭部帶自定義信息的請求方式稱為帶預檢(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請求,否則會報錯。

四、options請求如何避免

  1. 使用代理,避開跨域。
  2. 將復雜跨域請求更改為簡單跨域請求。
  3. 不使用帶自定義配置的header頭部。
  4. 后端解決,設置不進行options預檢。


免責聲明!

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



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