我有一个正在访问测试数据库的 Angular 应用程序。这以前有效,但周末我不再被允许访问。我没有对 Angular 代码进行任何更改。问题就在这里。
为了访问测试数据库,我必须传入用户名和密码,因为该数据库使用基本 HTTP 身份验证。我的资源最终看起来像这样。
angular.module("CoolApp.misc")
.factory('Ad', ad)
ad.$inject = ['$resource'];
function ad($resource) {
return $resource('http://username:password@build.com/api/advertisement.json');
}
现在当我运行时
Ad.get({}, function(resp) {}, function(badresp) {console.log(badresp)})
控制台输出 badresp 对象。我查看配置 header 部分并注意到这是 url...
url: "http://username@build.com/api/advertisement.json"
等一下,我将密码设置为 url。为什么 header 不向我提供密码?这就是为什么我在控制台中收到 No 'Access-Control-Allow-Origin' header is present on the requested resources.
的原因?
这里是我的 http 配置
angular.module("CoolApp")
.config(config);
config.$inject = ["$httpProvider"];
function config($httpProvider) {
$httpProvider.defaults.useXDomain = true;
//$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common["X-Requested-With"];
$httpProvider.defaults.headers.common["Accept"] = "application/json";
$httpProvider.defaults.headers.common["Content-Type"] = "application/json";
}
我的问题是,这有什么问题以及如何修复它?
最佳答案
请求的资源上不存在“Access-Control-Allow-Origin” header 。
如果您说自上次触摸以来您没有更改前端代码,那么这只能意味着服务器上的某些内容发生了变化...根据您提供的错误,这似乎是一个非常明显的情况,有人删除了服务器上的 Access-Control-Allow-Origin
服务器,或限制来源。
您无法在客户端上更改它;这必须在服务器上进行更改。
关于javascript - AngularJS 和基本 HTTP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31009128/