Javascript 浏览器中存在响应标头,但未由$http Response.headers()解析
在Angular应用程序中,我们需要解析大约$http的响应头 特别是,我们需要解析一些带有X前缀的响应头,例如Javascript 浏览器中存在响应标头,但未由$http Response.headers()解析,javascript,angularjs,http,http-headers,httpresponse,Javascript,Angularjs,Http,Http Headers,Httpresponse,在Angular应用程序中,我们需要解析大约$http的响应头 特别是,我们需要解析一些带有X前缀的响应头,例如X-Total-Results:35 打开浏览器开发工具的Network选项卡并检查与$http请求相关的资源,我验证了响应头X-Total-Results:35是否存在 在浏览器中,X-Total-Results标头可用,但无法在$http中解析 有没有一种方法可以在$http中访问“原始”响应并为标头编写自定义解析器 $http.({method: 'GET', url: apiU
X-Total-Results:35
打开浏览器开发工具的Network
选项卡并检查与$http请求相关的资源,我验证了响应头X-Total-Results:35
是否存在
在浏览器中,X-Total-Results标头可用,但无法在$http中解析
有没有一种方法可以在$http中访问“原始”响应并为标头编写自定义解析器
$http.({method: 'GET', url: apiUrl,)
.then( function(response){
console.log('headers: ', response.headers());
console.log('results header: ', response.headers('X-Total-Results'));
// ...
})
控制台输出
headers: Object {cache-control: "no-cache="set-cookie"", content-type: "application/json;charset=utf-8"}
results header: null
使用$httpProvider.interceptors您可以拦截请求和响应 比如说
$httpProvider.interceptors.push(['$q', '$injector', function ($q, $injector) {
return {
'responseError': function (response) {
console.log(response.config);
},
'response': function (response) {
console.log(response.config);
},
'request': function (response) {
console.log(response.config);
},
};
}]);
更新:您可以在呼叫本身中检索标题信息
$http.({method: 'GET', url: apiUrl)
.then( (data, status, headers, config){
console.log('headers: ', config.headers);
console.log('results header: ', config.headers('X-Total-Results'));
// ...
})
您不能在JavaScript上读取头,但可以在开发人员控制台上查看它的原因是,对于CORS请求,您需要允许客户端读取头 您的服务器需要发送此标头:
Access-Control-Expose-Headers:X-Total-Results
为了回答您在评论中的问题,
Access Control Allow Headers
不允许通配符,根据响应对象在$http回调中可用:$http()。然后(函数(响应){//response object available here})
问题是它没有解析我感兴趣的结果头--请参见问题。您的更新代码有问题,您的意思是。成功(函数(数据、状态、头、配置){})?这很奇怪,您是否有任何拦截器可能正在修改返回的承诺?否,我没有interceptor@yvesmancera我也觉得很奇怪!如果标题在dev工具浏览器中可见,则意味着它应该可以在angular中访问,对吗?或者CORS或类似问题可能仍然存在一些问题?api是跨域访问的,我有CORS,我会用其他标题更新这个问题。既然你提到了CORS,这肯定是你的问题:谢谢,我会试试的。现在我有accesscontrolallowheaders:X-Total-Results
当然还有accesscontrolalloworigin:
这就解决了问题。不过这很有趣,我认为开发人员控制台是一个客户端。。。。仅凭猜测,我会期望类似于运行在同一浏览器中的angular/javascript客户端。。。很明显,我遗漏了一些东西。你也可以在开发者工具上查看HTTPOnly cookies,而在JavaScript上看不到它们。为了节省我的时间,我有一个Cors Toggle chrome插件,因此我只能看到几个标题。