關於跨域請求及解決方案

跨域問題來源於瀏覽器的同源策略,協議+主機名+端口號 相同,則允許相互訪問。也就是說JavaScript只能訪問和操作自己域下的資源,不能訪問和操作其他域下的資源。

示例:

$.ajax({
    url: "http://baidu.com",
    data: {},
    success: function (data) {
        console.log("請求成功:", data);
    },
    error: function (e) {
        console.log("請求失敗:", e);
    }
});

結果:

 解決方法 :

 1 、 CORS 

,只需在請求的服務器中添加請求頭信息如下:

    public function ajax()
    {
        header('Access-Control-Allow-Origin: *');

        // ...

        return "ok";
    }

2 、JSONP

前端請求設置回調函數名:

$.ajax({
    url: "http://test.com",
    data: {},
    dataType:"jsonp",
    jsonpCallback:"callback_name",
    success: function (data) {
        console.log("請求成功:", data);
    },
    error: function (e) {
        console.log("請求失敗:", e);
    }
});

後端接收回調函數,並拼接數據返回:

    public function index()
    {
        $call_back = $_GET["callback_name"];

        return $call_back . '( ok )';
    }

JSONP 方式只支持 GET 方式跨域請求;

3、代理

代理方式是通過向同域服務器請求接口,在同域服務器請求其它服務器的數據再返回;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章