我正在开发Cordova应用程序,需要通过我的Drupal后端通过OAuth进行身份验证。我试图获取请求令牌。我收到了200回复,而且我和Fiddler都能看到我得到了我的令牌:
我必须说我收到了来自Fiddler的以下信息:
响应已编码,可能需要在检查前进行解码。点击此处进行转换。
我点击解码后会截取屏幕截图。
但Angular正在输入$http
的错误功能,Firefox告诉我响应是空的:
Angular发送的请求标头告诉我的服务它接受application/json
和plain/text
(以及*/*
)。
所以有人能告诉我为什么Fiddler告诉我有回应,而Firefox和Angular告诉我其他情况?是解码吗?如果是这样,我希望我可以向$http
添加一个函数来转换响应。但在该函数中,我可以看到data
参数是"" (一个空字符串)。
更新
我认为原因是响应是在“chunked”中发送的。格式。 Angular的$http
无法处理分块响应。现在找出为什么我的服务器/ Drupal正在为这么小的响应发送一个分块响应以及如何避免它。或者如何接受Angular中的分块响应。
更新2
我设法使用jQuery将此行为放在fiddle中。它调用的资源是不受保护的,所以我的问题与OAuth没什么关系(我以后会尝试重写它)。我不确定它是否是分块响应或CORS。
但是通过Fiddler,我可以看到我收到了包含所有数据的回复(当您浏览the resource时,您在浏览器中看到的数据相同。虽然您必须&#39} ;首先是Fiddler中的unchunk'
或者我的浏览器是否因为CORS而阻止了它,即使响应返回了?
答案 0 :(得分: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。