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

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

在上一篇《服務端php解決jquery ajax跨域請求restful api問題及實踐》中,我簡單介紹瞭如何經過服務端解決jquery ajax的跨域請求問題,可是,在這個過程當中,咱們會發現,在不少post,put,delete等請求以前,會有一次options請求。本文主要是來討論一下這是什麼緣由引發的。php

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

什麼是options請求呢?它是一種探測性的請求,經過這個方法,客戶端能夠在採起具體資源請求以前,決定對該資源採起何種必要措施,或者瞭解服務器的性能。java

在ajax中出現options請求,也是一種提早探測的狀況,ajax跨域請求時,若是請求的是json,就屬於複雜請求,所以須要提早發出一次options請求,用以檢查請求是不是可靠安全的,若是options得到的迴應是拒絕性質的,好比404\403\500等http狀態,就會中止post、put等請求的發出。jquery

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

相關文章
相關標籤/搜索