2016-10-07 221 views
1

我有Restfull API(localhost:8180),它具有安全身份驗證。使用Angular JS http(或其他服務)我需要登錄到該服務器並從localhost獲取我的數據:8180/api/version /?1(這只是示例)請在下面找到我的代碼。使用angularjs連接遠程服務器

//configure file 


    app.config(['$httpProvider', function($httpProvider) { 
     $httpProvider.defaults.withCredentials = true; 
    }]); 

    //setting cookie 
    app.run(['$http', '$cookies', function($http, $cookies) { 
    $http.defaults.headers.post['JSESSIONID'] = $cookies.JSESSIONID; 
     }]); 



     // My Controller 

    $http({ 
    url:'http://localhost:8180', 
    method:'POST', 
    data: { 
    username:'adminadmin', 
    password:'passpass' 
    }, 
headers: { 
"Access-Control-Allow-Headers": "*", 
"Access-Control-Allow-Credentials": true, 
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 
"Accept": "*/*", 
'Authorization': 'Basic adminadmin:passpass' // I guess its wrong 
} 
}) 
.success (function(){ 
    console.log("Success"); 
    //Need to call my API here 
}) 
.error(function(data, status, headers, config){ 
    console.log("Failed"); 
}); 

在這裏,我沒有得到任何訪問控制允許來源和產地空 錯誤。如果成功,我需要在使用get或post的成功方法的 內調用localhost:8180/api/version?1。這裏我的服務器是 localhost:9596。我需要從9596主機調用8180主機,並將 數據導入9596主機。

+1

讀https://開頭en.wikipedia.org/wiki/Cross-origin_resource_sharing –

+1

您不需要通過標頭設置原始標題,將它們設置在您的API中。基本上來源拒絕非法請求,所以ID不使用*無論如何..也不需要像這樣的授權標題,如果您通過POST發送dat ... –

+0

當最終用戶的瀏覽器尋址時'localhost'不會有相同的含義;你確定這是你想要的嗎? – Aaron

回答

1

無論何時您收到交叉錯誤,您都需要作爲服務器人員添加一些標頭,並將響應發送回ajax請求。

基礎上後端則需要使用不同的方法,使服務器這一變化:

在Java Tomcat服務器:您需要配置過濾器映射

來源:http://enable-cors.org/server.html