【发布时间】:2014-09-27 18:05:46
【问题描述】:
我正在开发一个 Cordova 应用程序,需要通过 OAuth 使用我的 Drupal 后端进行身份验证。我正在尝试获取请求令牌。我收到 200 响应,使用 Fiddler 我可以看到我得到了我的令牌:
我必须说我收到了 Fiddler 的以下消息:
响应已编码,可能需要在检查前进行解码。点击这里进行转换。
截图是我点击解码后截的。
但是 Angular 正在输入 $http 的错误函数,而 Firefox 告诉我响应为空:
Angular 发送的请求标头告诉我的服务它接受application/json 和plain/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