angularjs httpprovider 拦截器无法访问自定义 http 响应 header(CORS 请求)的原因是什么?
What's the reason an angularjs httpprovider interceptor cannot access a custom http response header (CORS request)?
我有一个 angularjs 1.x 应用程序,它使用 jsons 与休息服务通信。
由于该服务位于不同的域下,我正在使用 CORS。
我的 angular 应用程序有一个响应拦截器记录响应 headers:
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 响应 headers
我正在使用 http 嗅探器工具,我可以在服务器响应中看到 headers。
我很确定这与 CORS 有关,但我无法确定。
响应 headers(包括 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"}
问题:
我在记录响应 header 时看不到 MY-CUSTOM-HEADER
的原因是什么?或者我可以在嗅探工具上看到的其他 http 响应 header。谁阻止我在 responseInterceptor
上访问它们?
编辑:
我检查了同一域下的同一应用程序,可以使用相同的代码访问 header。确实跟CORS有点关系。
好的,在确定问题出在 CORS 之后,我发现我缺少一个名为 Access-Control-Expose-Headers
的 CORS http header
设置 Access-Control-Expose-Headers="MY-CUSTOM-HEADER"
后,我可以访问 header。
我有一个 angularjs 1.x 应用程序,它使用 jsons 与休息服务通信。
由于该服务位于不同的域下,我正在使用 CORS。
我的 angular 应用程序有一个响应拦截器记录响应 headers:
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 响应 headers
我正在使用 http 嗅探器工具,我可以在服务器响应中看到 headers。
我很确定这与 CORS 有关,但我无法确定。
响应 headers(包括 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"}
问题:
我在记录响应 header 时看不到 MY-CUSTOM-HEADER
的原因是什么?或者我可以在嗅探工具上看到的其他 http 响应 header。谁阻止我在 responseInterceptor
上访问它们?
编辑: 我检查了同一域下的同一应用程序,可以使用相同的代码访问 header。确实跟CORS有点关系。
好的,在确定问题出在 CORS 之后,我发现我缺少一个名为 Access-Control-Expose-Headers
设置 Access-Control-Expose-Headers="MY-CUSTOM-HEADER"
后,我可以访问 header。