Javascript IE未命中标头-角度$http

Javascript IE未命中标头-角度$http,javascript,angularjs,internet-explorer,Javascript,Angularjs,Internet Explorer,我正在尝试使用angularjs$http从远程服务器(inaturalist.org)获取结果。服务器使用头指定分页信息(总条目、页面等) 我的问题是当使用IE(Edge,IE11测试)时,我看不到所有的标题 $http({ method : 'GET', url : 'https://www.inaturalist.org/observations.json?page=1&per_page=30'}) .success(function (data, status, hea

我正在尝试使用angularjs$http从远程服务器(inaturalist.org)获取结果。服务器使用头指定分页信息(总条目、页面等)

我的问题是当使用IE(Edge,IE11测试)时,我看不到所有的标题

$http({
method  : 'GET',
url     : 'https://www.inaturalist.org/observations.json?page=1&per_page=30'})
.success(function (data, status, headers) {

   scope.headers = headers();
});
}))


知道怎么回事吗?

这是Internet Explorer实现XMLHttpRequest对象时的一个错误。因为您正在提出跨域请求,所以CORS规则适用。这是一个GET请求,因此无需发出飞行前选项请求。服务器正确返回以下响应头:

Access-Control-Expose-Headers: X-Per-Page, X-Total-Entries
但是,您无法使用该方法访问
X-Total-Entries
响应标头(这就是成功回调中的
header
变量所表示的)

Google Chrome是唯一一个完全正确地实现此
访问控制公开标题
CORS标题的浏览器

您可能会发现下面的部分很有用,尤其是
访问控制暴露标题问题
部分:

所有浏览器(Google Chrome除外)都有bug getRequestHeader() 实现,因此客户端甚至可能无法访问头 设置访问控制暴露标头后。以我为例,, ETag头只能在Google Chrome浏览器中访问。狩猎归来 只有简单的响应头,而Firefox不返回任何响应头 响应标题

$http({
method  : 'GET',
url     : 'https://www.inaturalist.org/observations.json?page=1&per_page=30'})
.success(function (data, status, headers) {

   scope.headers = headers();
});

恐怕这里唯一的解决办法是在您的域上设置一个代理脚本,作为您的域和远程域之间的桥梁。然后向您自己的域发出AJAX请求,以避免使用CORS。

哇,这看起来像Internet Explorer的
XMLHttpRequest
CORS请求实现中的一个bug。服务器正确返回
Access Control Expose Headers:X-Per-Page,X-Total-Entries
响应头,但显然无法使用该方法获得
X-Total-Entries
头(这就是Angular的
$http
实现中的
Headers
函数所表示的)。是的,我也用jQuery进行了测试,结果相同是的,jQuery和Angular都使用本机
XMLHttpRequest
对象。抓得很好。但也许IE根本不支持
访问控制暴露标题
CORS响应标题。请查看本文:底部有一段称为
访问控制暴露标题问题
。似乎只有Google Chrome正确地实现了
访问控制暴露标题
标题。