AngularJs获得授权请求

时间:2018-12-16 15:23:02

标签: angularjs cors

我正在尝试发出需要身份验证的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请求?

2 个答案:

答案 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: *

有关MDN: HTTP Headers 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