因为在AngularJS中使用CORS和http认证可能很棘手,所以我编辑了这个问题,分享了一个学到的课程.首先,我要感谢igorzg.他的回答对我很有帮助.方案如下:您希望使用AngularJS $ http服务将POST请求发送到其他域.获取AngularJS和服务器设置时需要注意几个棘手的事情.
第一:在您的应用程序配置中,您必须允许跨域调用
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
app.config(function($httpProvider) {
//Enable cross domain calls
$httpProvider.defaults.useXDomain = true;
});
Run Code Online (Sandbox Code Playgroud)
第二:您必须指定withCredentials:true并将用户名和密码指定为请求.
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
$http({
url: 'url of remote service',
method: "POST",
data: JSON.stringify(requestData),
withCredentials: true,
headers: {
'Authorization': 'Basic bashe64usename:password'
}
});
Run Code Online (Sandbox Code Playgroud)
Тhird:服务器设置.你必须提供:
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com …Run Code Online (Sandbox Code Playgroud) 我有一个问题试图对我的其他php服务器进行$ http调用.我正在从客户端到后端进行跨域调用.
从我的Angular应用程序中,这是$ http服务的配置方式:
.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('httpResponseInterceptor');
$httpProvider.interceptors.push('httpTimeStampMarker');
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.headers.post['Access-Control-Allow-Origin'] = '*';
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
delete $httpProvider.defaults.headers.common['Content-Type, X-Requested-With'];
}])
Run Code Online (Sandbox Code Playgroud)
这是实际的$ http.post()配置方式:
// Set the headers
var headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT',
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*'
};
return $http({
method: "POST",
url: base_url,
data: $.param(args),
headers: headers
})
.success(function(data, status) {
})
.error(function(data, status) {
});
Run Code Online (Sandbox Code Playgroud)
这是服务器的.htaccess:
# Cors
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Allow-Methods"
Header add …Run Code Online (Sandbox Code Playgroud)