在專案中發現ajax中出現兩次請求,options請求和get請求,得到的資料出錯,所以想要去掉options請求。
ajax請求如下:
ajaxrequestget: function (lastpath, requestparams, successfun) ,
url : this.baseurl+lastpath,
type : "get",
data: requestparams,
success : function(data)
});
},
檢視到瀏覽器network有兩次請求,請求url一樣:
查詢原因是瀏覽器對簡單跨域請求和複雜跨域請求的處理區別。
xmlhttprequest會遵守同源策略(same-origin policy). 也即指令碼只能訪問相同協議/相同主機名/相同埠的資源, 如果要突破這個限制, 那就是所謂的跨域, 此時需要遵守cors(cross-origin resource sharing)機制。
那麼, 允許跨域, 不就是服務端設定access-control-allow-origin: *就可以了嗎? 普通的請求才是這樣子的, 除此之外, 還一種叫請求叫preflighted request。
preflighted request在傳送真正的請求前, 會先傳送乙個方法為options的預請求(preflight request), 用於試探服務端是否能接受真正的請求,如果options獲得的回應是拒絕性質的,比如404\403\500等http狀態,就會停止post、put等請求的發出。
解決的方法
AJAX中出現OPTIONS請求
之前有乙個專案使用zepto來傳送ajax請求,檢視nginx日誌或使用chrome dev tools檢視請求傳送情況時,會看到每次調後台api的請求之前,都會傳送乙個options請求,無論api要求請求的方法是get或post.為什麼會傳送這個options請求?可以去掉嗎?首先,我在js 裡...
呼叫一次AJAX,傳送兩次請求
瀏覽器對複雜跨域請求的處理,在傳送真正的請求前,會先傳送乙個方法為options的預請求 preflight request 用於試探服務端是否能接受真正的請求,如果options獲得的回應是拒絕性質的,比如404 403 500等http狀態,就會停止post put等請求的發出。有三種方式會導致...
前端 傳送請求時,同時出現兩次請求
1事故情況 在前端ajax請求資料的時候,有時候會向後台一次性傳送兩次請求,這兩次請求第一次無返回資料,第二次才會返回正確資料。2事故原因 原來對於跨域,有兩種不同的請求型別。分別為簡單跨域請求和複雜跨域請求 帶預檢的跨域請求 3複雜跨域 非簡單請求的cors請求,會在正式通訊之前,增加一次http...