【问题标题】:Angular and Firefox tell me the response from my OAuth call is wrong, Fiddler tells me otherwiseAngular 和 Firefox 告诉我 OAuth 调用的响应是错误的,Fiddler 告诉我否则
【发布时间】:2014-09-27 18:05:46
【问题描述】:

我正在开发一个 Cordova 应用程序,需要通过 OAuth 使用我的 Drupal 后端进行身份验证。我正在尝试获取请求令牌。我收到 200 响应,使用 Fiddler 我可以看到我得到了我的令牌:

我必须说我收到了 Fiddler 的以下消息:

响应已编码,可能需要在检查前进行解码。点击这里进行转换。

截图是我点击解码后截的。

但是 Angular 正在输入 $http 的错误函数,而 Firefox 告诉我响应为空:

Angular 发送的请求标头告诉我的服务它接受application/jsonplain/text(和*/*)。

那么谁能告诉我为什么 Fiddler 告诉我有响应,而 Firefox 和 Angular 却告诉我不然?是解码吗?如果是这样,我希望我可以向我的$http 添加一个函数来转换响应。但在那个函数中,我可以看到data 参数是“”(一个空字符串)。

更新

我认为原因是响应以“分块”格式发送。而 Angular 的 $http 无法处理分块响应。现在找出为什么我的服务器/Drupal 为这么小的响应发送分块响应以及如何避免它。或者如何在 Angular 中接受分块响应。

更新 2

我已经设法使用 jQuery 将此行为放在 fiddle 中。它调用的资源是不受保护的,所以我的问题与 OAuth 无关(稍后我会尝试重写它)。我不确定是分块响应还是 CORS。

但是通过 Fiddler,我可以看到我收到了包含所有数据的响应(当您浏览到 the resource 时,您在浏览器中看到的数据相同。虽然您必须先在 Fiddler 中“取消分块” .

或者即使响应返回,我的浏览器是否因为 CORS 阻止了它?

【问题讨论】:

  • Web 浏览器(尤其是 XmlHttpRequest 对象)会自动为您解码和取消分块 HTTP 响应;没有办法禁用它。您的浏览器控制台是否有任何其他信息,尤其是提及 CORS 错误?
  • 好吧,除非我弄错了,如果浏览器取消分块就好了。但是,Angular 和 jQuery(我都尝试了两种方法)都输入了它们的错误函数。没有额外的错误信息。但是状态码(正如你在我的屏幕截图中看到的那样,是 200)。
  • 关于 CORS,我不是这方面的专家。但是我设法为未受保护的资源获得了相同的行为,所以我把它放在了小提琴中:jsfiddle.net/petermorlion/jo8f1gvo

标签: javascript angularjs oauth response fiddler


【解决方案1】:

如果您按 F12 并查看浏览器的错误控制台,您将看到:

XMLHttpRequest cannot load http://www.gentlesite.be/drupal/api/nodes. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access.

Same-Origin-Policy 会阻止您的 JavaScript 从其他网站读取内容,除非其他网站明确选择加入。有关 Same-Origin-Policy 的介绍,请参阅 this post

【讨论】:

  • 想象我尴尬和叹息。确实,在我重新启用控制台中的安全消息之后(由于某种原因,我必须在不久前禁用它)。非常感谢!
猜你喜欢
  • 2020-10-10
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 2013-07-25
  • 1970-01-01
相关资源
最近更新 更多