首页 文章

是什么原因导致angularjs httpprovider拦截器无法访问自定义http响应头(CORS请求)?

提问于
浏览
1

我有一个angularjs 1.x应用程序,它使用jsons与休息服务进行通信 .

由于该服务位于不同的域下,我使用的是CORS .

我的角应用程序有一个响应拦截器,记录响应头:

app.factory('responseInterceptor', ["$q", function ($q) {
    return {
        response: function (response) {
            console.log(response.headers()); // log the headers!!!
            return response || $q.when(response);
        },
        responseError: function (rejection) {
            return $q.reject(rejection);
        }
    }
}]).
config(['$httpProvider', function ($httpProvider) {
    $httpProvider.interceptors.push('responseInterceptor');
}]);

现在一切正常,但我无法访问自定义http响应标头

我正在使用http嗅探器工具,我可以看到服务器响应中的标头 .

我很确定这与CORS有关,但我不能指出它 .

响应头(包括CORS)如下所示:

Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
MY-CUSTOM-HEADER: Go Home This Works
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE
Access-Control-Allow-Headers: MY-CUSTOM-HEADER, CONTENT-TYPE
Date: Tue, 21 Jun 2016 13:18:20 GMT
Content-Length: 14112

这是我在拦截器的控制台中看到的:

Object {pragma: "no-cache", content-type: "application/json; charset=utf-8", cache-control: "no-cache", expires: "-1"}

问题:

当我记录响应头时,我无法看到 MY-CUSTOM-HEADER 的原因是什么?或者我可以在我的嗅探工具上看到的其他http响应头 . 谁阻止我在 responseInterceptor 上访问它们?

Edit :我在相同的域下检查了相同的应用程序,并且COULD使用相同的代码访问标头 . 它确实与CORS有关 .

1 回答

  • 0

    好的,在确定问题是CORS后,我发现我错过了一个名为 Access-Control-Expose-Headers 的CORS http头

    设置 Access-Control-Expose-Headers="MY-CUSTOM-HEADER" 后,我能够访问该 Headers .

相关问题