我正在尝试使用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();
});
});
请参阅https://jsbin.com/rohoda/edit?js,output
任何想法都错了吗?
答案 0 :(得分:4)
这是Internet Explorer的XMLHttpRequest对象实现中的错误。由于您正在进行跨域请求,因此适用CORS规则。这是一个GET请求,因此没有必要进行飞行前OPTIONS请求。服务器正确返回以下响应头:
Access-Control-Expose-Headers: X-Per-Page, X-Total-Entries
然而您无法使用getResponseHeader()
方法访问X-Total-Entries
响应标头(这是header
变量在成功回调中的表示。)
完全正确实现此Access-Control-Expose-Headers
CORS标头的唯一浏览器是Google Chrome。
您可能会发现following article
有用,尤其是Access-Control-Expose-Headers problem
部分位于底部:
所有浏览器(Google Chrome除外)都有错误的getRequestHeader() 实现,因此即使客户端可能无法访问标头 设置Access-Control-Expose-Headers标头后。在我的例子中, ETag标题只能在Google Chrome浏览器中访问。 Safari返回 只有简单的响应标头,而Firefox不会返回ANY 响应标题。
我担心这里唯一的解决方法是在您的域上设置一个代理脚本,它将充当您的域和远程域之间的桥梁。然后将AJAX请求发送到您自己的域,以避免使用CORS。