访问angularjs中的自定义http响应标头

Ibr*_*rah 10 javascript rest angularjs angular-http

服务器响应

我正在尝试访问标题'错误详细信息',您可以在浏览器网络检查器(上面的链接)中看到,标头返回.服务器方面我还将自定义标头添加到"Access-Control-Expose-Headers"以允许跨域请求,因为这被建议是对其他问题的修复.

以下是对服务器的请求以及成功/错误回调.

this.signon = function (request, onComplete, onError) {
    console.log("Calling server with 'login' request...");

    return $http.post("http://localhost:8080/markit-war/services/rest/UserService/login/", request)
        .then(onComplete, onError);
};

var onLookupComplete = function(response) {
    if (response.data.username)
    {
        //If user is returned, redirect to the dashboard.
        $location.path('/dashboard');
    }

    $scope.username = response.data.username;
};

var onError = function(response) {
    $scope.error = "Ooops, something went wrong..";
    console.log('error-detail: ' + response.headers('error-detail'));
};
Run Code Online (Sandbox Code Playgroud)

当我尝试访问响应头时,如下所示:

    console.log(response.headers());
    console.log('error-detail: ' + response.headers('error-detail'));
Run Code Online (Sandbox Code Playgroud)

这只输出:content-type:"application/json"error-detail:null

有没有理由将错误详细信息标头映射到响应对象?

And*_*gle 10

我认为你走在正确的轨道上.要访问自定义标头,您的服务器需要设置此特殊Access-Control-Expose-Headers标头,否则您的浏览器将只允许访问Mozilla文档中列出的6个预定义标头值.

在屏幕截图中,响应中不存在此标头.你应该看一下这个cors头的后端也会出现在响应中.


geo*_*awg 8

这是一个CORS问题.因为这是一个跨源请求,所以浏览器隐藏了大多数标头.服务器需要在其响应中包含Access-Control-Expose-Headers标头.

访问控制-暴露-集管1个响应报头指示哪些报头可以公开为通过列出他们的名字的响应的一部分.

默认情况下,仅公开6个简单响应标头:

  • 缓存控制
  • 内容语言
  • 内容类型
  • 过期
  • 最后修改
  • 附注

如果您希望客户端能够访问其他标头,则必须使用Access-Control-Expose-Headers标头列出它们.

有关更多信息,请参阅MDN HTTP标头 - 访问控制 - 公开标头