我设置了一个PhoneGap项目并通过PhoneGap Desktop启动它。 在这个项目中,我调用以下jQuery方法:
$.ajax({
type: 'GET',
url: 'http://api.fixer.io/latest',
dataType: 'json',
success: function(data){
exchangeRates = data;
displayData(exchangeRates);
}
})
一旦我用按钮开火,我就得到403“禁止”的回复。 请求的网址为:http://192.168.178.40:3000/proxy/http://api.fixer.io/latest
本地Serveradress(192.168.178.40:3000)是PhoneGap Desktop加载App和代理的地方,这似乎也来自PhoneGap。 发送的请求标头如下所示:
Host: 192.168.178.40:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.178.40:3000/
Cookie: connect.sid=s%3AhoA3oe0JbAdmGQ4Z6bYlRuFa.oDM1qjeHCadzwfSmYy%2BFabG0b22OH0ZqRgVuLMlcCL8
Connection: keep-alive
响应标题如下:
Connection: close
Content-Type: text/plain
Date: Fri, 20 Nov 2015 12:07:23 GMT
Server: nginx/1.4.6 (Ubuntu)
Status: 403 Forbidden
Transfer-Encoding: chunked
当我尝试打开请求的URL时,它会提供我想要的JSON。
为什么我会收到403?有人可以帮忙吗?
[成功后编辑]
好吧,好像我在我设置的PhoneGap项目中遇到了问题,因为
Simon Pricketts建议似乎是正确的。
所以我建立了一个全新的项目。这次没有PhoneGap覆盖的直接Cordova 5.4.0项目。然后我再次尝试了西蒙斯的建议并且瞧瞧--->这次成功!
结论:不知何故,PhoneGap项目的config.xml与Content-Security-Policy结合导致应用程序出现打嗝,导致403错误。由于我对PhoneGap不太熟悉,所以我尝试了Cordova直接工作。
答案 0 :(得分:1)
如果使用Cordova 5,您可能需要设置内容安全策略元标记,如果使用iOS9或将来将应用程序移动到iOS,还可以配置App Transport Security。
我有一篇博文,演示了如何执行此操作,并且实际上也使用了您尝试使用的相同数据源 - 您可以阅读此here。
如果这是你的问题,你需要在index.html中使用这样的东西:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://api.fixer.io">
注意:connect-src子句指定对http://api.fixer.io
的访问答案 1 :(得分:0)
您很可能无法whitelisted您尝试访问的域名。如this question中所述,在连接到&#34;外部&#34;之前域名,你需要将其列入白名单。
这样我们也可以在这里得到答案:你需要将它添加到你的配置文件中:
<access origin="*" />
答案 2 :(得分:0)
在Post Cordova 5中,我认为您需要将白名单作为插件包含在config.xml文件中,如下所示:
<access origin="http://*.phonegap.com" subdomains="true" />
<access origin="*://*.api.fixer.io/*" subdomains="true" />
<plugin name="cordova-plugin-whitelist" />
如果您想要从外部源或ajax调用将外部文件包含到窗口中,则需要以这种方式包含插件