1. 程式人生 > >jquery ajax 請求中多出現一次OPTIONS請求及其解決辦法

jquery ajax 請求中多出現一次OPTIONS請求及其解決辦法

安全 htm 及其 就是 跨域請求 ons 什麽 get ati

http://www.tangshuang.net/2271.html

在上一篇《服務端php解決jquery ajax跨域請求restful api問題及實踐》中,我簡單介紹了如何通過服務端解決jquery ajax的跨域請求問題,但是,在這個過程中,我們會發現,在很多post,put,delete等請求之前,會有一次options請求。本文主要是來討論一下這是什麽原因引起的。

根本原因就是,W3C規範這樣要求了!在跨域請求中,分為簡單請求(get和部分post,post時content-type屬於application/x-www-form-urlencoded,multipart/form-data,text/plain中的一種)和復雜請求。而復雜請求發出之前,就會出現一次options請求。

什麽是options請求呢?它是一種探測性的請求,通過這個方法,客戶端可以在采取具體資源請求之前,決定對該資源采取何種必要措施,或者了解服務器的性能。

在ajax中出現options請求,也是一種提前探測的情況,ajax跨域請求時,如果請求的是json,就屬於復雜請求,因此需要提前發出一次options請求,用以檢查請求是否是可靠安全的,如果options獲得的回應是拒絕性質的,比如404\403\500等http狀態,就會停止post、put等請求的發出。

雖然在下面的參考文獻中有人提出可以取消options請求,但是實測後發現是不行的,jquery封裝之後,更不能輕易取消。因此,靠javascript客戶端取消options請求是不可能的,只能通過服務端對options請求做出正確的回應,這樣才能保證options請求之後,post、put等請求可以被發出。但是,我們不能允許所有的options請求,而應該是有條件的,所以最好是通過一個特殊的機制,去驗證客戶端發出的options請求數據是否是符合服務端的條件的,如果不滿足,返回403,則客戶端會取消原有的post計劃。

jquery ajax 請求中多出現一次OPTIONS請求及其解決辦法