JS發送跨域Post請求出現兩次請求的解決辦法


原文地址: 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中的一種


免責聲明!

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



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