2016-06-21 51 views
1

我有一个angularjs 1.x应用程序使用jsons与休息服务进行通信。angularjs httpprovider拦截器无法访问自定义http响应头(CORS请求)的原因是什么?

由于服务位于不同的域下,因此我使用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上访问它们?

编辑: 我检查了同一个域下的同一个应用程序,并且可以使用相同的代码访问这个头。它确实与CORS有关。

回答

0

好,标识,这个问题是CORS后,我发现我失踪的CORS HTTP头叫Access-Control-Expose-Headers

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

相关问题