我正在尝试发出需要身份验证的get请求,但没有发出GET请求,正如我在chrome的网络标签中所看到的那样,它正在发出OPTIONS请求并因此出现404错误?
$http.defaults.headers.common['Authorization'] = 'Basic ' + _this.auth_token;
$http.get('http://localhost:2337/getFeedbackForm/abcd?format=json')
.success(function (data, status, headers) {
blockUI.stop();
$scope.feedbackForm = data;
})
.error(function (data, status, header, config) {
blockUI.stop();
$scope.feedbackForm = data;
});
为什么要像PUT或POST那样对待GET请求?
答案 0 :(得分:0)
您的API请求看起来正确,因此您的Angular代码不是问题。
如果您看到OPTIONS请求失败,但没有看到GET请求,则表明OPTIONS请求失败,因此浏览器未发送GET请求。 MDN docs on preflighted requests解释了这种行为:
与“简单请求”(如上所述)不同,“预检”请求首先通过OPTIONS方法将HTTP请求发送到另一个域上的资源,以确定实际请求是否可以安全发送。跨站点请求这样被预处理,因为它们可能会影响用户数据。
如果您的服务器未为运行Angular应用程序的域启用CORS,则表示它不接受请求,因此浏览器不会发送GET请求。
要解决此问题,必须在运行在localhost:2337的API上启用CORS。由于我不知道您的服务器是内置的,因此有一些选项:
您可以先将其更改为允许所有请求,然后再按域或路由缩小范围,以进行尝试。
本质上,您的服务器需要返回OPTIONS请求的标头,其中包括请求域或使用通配符星号的所有内容:
Access-Control-Allow-Origin: *
答案 1 :(得分:0)
问题是后端的CORS。
有关CORS的更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
您的后端需要在所有端点上接受“ OPTION”类型的HTTP请求+在响应中添加标头
Access-Control-Allow-Origin
有关标题的更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin