原文地址: http://www.cnblogs.com/JimmyBright/p/7681097.html
簡單請求與非簡單請求區別部分轉載自:https://www.cnblogs.com/renpingsheng/p/7688134.html
為什么 post 請求會出現兩次請求?
跨域請求就會出源現這樣的問題。
由於CORS(cross origin resource share)規范的存在,瀏覽器會首先發送知一次options嗅探,同時header帶上origin,判斷是否道有跨域請求權限,服務器響應access control allow origin的值,供瀏覽器與origin匹配,如果匹配則正式發送post請求。
所有跨域的js在提交post請求的時候,如果服務端設置了可跨域訪問
public static function setCrossDomain()
{
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT');
}
都會默認發送兩次請求,第一次是預檢請求,查詢是否支持跨域,第二次才是真正的post提交。
JS中出現這個現象原因在於你發送了一個非簡單請求。
簡單請求與非簡單請求:
* 請求方式:HEAD,GET,POST
* 請求頭信息:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type 對應的值是以下三個中的任意一個
application/x-www-form-urlencoded
multipart/form-data
text/plain
只有同時滿足以上兩個條件時,才是簡單請求,否則為非簡單請求
解決方法:
由上面定義可以看出,把你的post提交改成get提交,就不會兩次請求,或者將post的header改成application/x-www-form-urlencoded, multipart/form-data 或 text/plain中的一種