【问题标题】:AngularJS and Apiary.IO - can't read any response headers?AngularJS 和 Apiary.IO - 无法读取任何响应标头?
【发布时间】:2013-01-07 01:22:03
【问题描述】:

我使用 Apiary.io 模拟我的 API。但不知何故,我无法使用 angularJS 从响应对象中读取任何标题。而且我确信我至少通过检查萤火虫正确设置了 Content-Type: application/json 。 Angular 中的代码也应该正确读取标题,因为我可以在将请求发送到 apiary.io 以外的其他地方时打印它们...

  $http.get('http://ies.apiary.io/some').then(function(response) {  
    console.log("ok",response.headers('Content-Type'));
    },function(response){console.log("err",response);});

http://plnkr.co/edit/zMO0pXGsIdJkV0fZdBdw

【问题讨论】:

  • 你能用代码设置一个 Plunker 或 jsFiddle,这样你就可以在上下文中向我们展示它不起作用的地方吗?这样我们可以更快地回复您。

标签: javascript http-headers angularjs apiary.io


【解决方案1】:

这一切都归结为 Firefox 中的一个错误:https://bugzilla.mozilla.org/show_bug.cgi?id=608735

对于 CORS 请求,firefox 没有为 req.getAllRequestHeaders() 返回任何内容,尽管 req.getRequestHeader('Content-Type') 正确返回。

要么必须修复 FF 错误,要么 Angular 必须解决它(就像 jQuery 所做的那样),或者您必须更深入并直接使用 XmlHttpRequest 实例。


这可能也是相关的,但可能不是核心问题:


然而,几天前,Apiary.io 没有在 CORS 标头中设置 Max-Age。因此,如果您有一个最小的蓝图,您可能会缓存 CORS 飞行前响应,因此即使您向蓝图添加了额外的资源,后续请求也可能会被禁止。

Max-Age 现在设置为 10 秒,因此它应该可以正常工作。但是,根据您的浏览器,飞行前缓存可能仍会影响您。尝试清除它或在另一个浏览器中测试这个应用程序。

【讨论】:

  • 在 Chrome 中运行良好,但 Firefox 仍然不。通过清除缓存的 Web 内容和清除离线 Web 内容和用户数据来清除 Firefox。即使是隐私浏览模式也无济于事..
  • @JakubKuchar 它在 FF 中也适用于我。您能否将您的请求/响应对(或屏幕截图)粘贴到 OPTIONS 请求的某处?或者,请通过support.apiary.io 上的“联系支持”创建票证,因为这看起来更像是在调试而不是与 Angular 相关的问题。
  • 我使用bounceapp.com 使用Firefox 和Chrominium 创建了2 个屏幕截图,希望它们可以使用,因为这是我第一次使用bounceapp.com
  • support.apiary.io 上的票已创建
  • AngularJS 问题已经 3 个月了 github.com/angular/angular.js/issues/1468
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 2023-03-11
  • 2023-03-21
  • 2016-09-02
相关资源
最近更新 更多