【问题标题】:AngularJS - set HTTP header for GET requestAngularJS - 为 GET 请求设置 HTTP 标头
【发布时间】:2014-08-23 23:49:48
【问题描述】:

可能这是一个普遍的问题,可以在互联网上找到,但我得到的是这里。

Adding a custom header to HTTP request using angular.js

所以我也照做了,把代码改成

设置标题

 var config = {headers:  {
                'Authorization': 'XXXYYY token="xxxxxxxx", realm="dash-api"',
                "X-Testing" : "testing"
                }
            };

get 请求调用:

return $http.get(api.host+'/agn/12/adv/1860/cam?status=1', config).then(function (response) {
                    return {
                        status:"success",
                        data:response.data.data.active
                    };
                }, function (error) {
                    return {
                        status:"error",
                        data:error
                    }
                });

如您所见,请求在方法类型 OPTIONS 中进行,并且未在请求中设置 Authorization 令牌。

请在这个问题上帮助我,因为我已经挣扎了两天。

非常感谢。

【问题讨论】:

  • 您是否排除了 CORS 是一个问题? stackoverflow.com/questions/19554414/angularjs-disabling-cors
  • 很确定这是一个 CORS 请求。不知道为什么api.host 会在请求发送到托管应用程序的同一台服务器时出现。 API 提供者也不允许 CORS 非常有意义,因为它似乎是通过不安全的通道进行令牌身份验证。

标签: javascript angularjs http-headers authorization


【解决方案1】:

我认为,如果您查看您引用的链接,您会遇到与作者相同的问题,并且该帖子的作者确实声明这是一个 CORS 问题 - 他与之通信的服务器没有支持 CORS,他在自己的帖子的评论中证实了这一点。

至于为什么您会收到 OPTIONS 请求,这是因为 CORS 在发出实际请求之前向服务器发出“飞行前”请求以确定是否支持 CORS。

【讨论】:

    【解决方案2】:

    您看到OPTIONS 请求很可能是因为您正在发出跨域请求 (CORS)。首先,您的服务器应该支持 CORS(通过在响应中设置 Access-Control-Allow-Origin 标头来响应 OPTIONS 请求)。

    如果你做一个经过身份验证的跨域请求,你需要在发出请求时将withCredentials设置为true

    $http.get(url, { withCredentials: true })
    

    【讨论】:

      猜你喜欢
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 2018-11-15
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多