2016-01-22 58 views
1

我有一个API服务器,它具有API客户端域的CORS白名单,我想使用基于Cordova的移动应用程序调用相同的API服务器。我应该将哪个域添加到Cordova客户端的白名单中? 我当然不希望让所有的起源[所以*是无从谈起] API服务器是NGINX科尔多瓦应用程序的API服务器CORS白名单

+0

我对此陈述感到困惑*我想使用基于Cordova的移动应用程序调用相同的API服务器。*您使用的文字在技术上是正确的,但您的问题没有意义。我认为你对[Cordova白名单插件](https://www.npmjs.com/package/cordova-plugin-whitelist)是如何工作有误解。 FWIW:Cordova/Phonegap不使用CORS。 – JesseMonroy650

+0

问题不在于Cordova白名单插件,而是关于服务器端白名单。 –

+0

我对此非常清楚。 Cordova/Phonegap不使用CORS。作为协议的一部分,CORS从客户端开始。在协议中,服务器告诉客户端接受哪些域。科尔多瓦/ Phonegap忽略此。此外,如果您打算将您的应用程序用作您网站的包装,则您的应用程序将被Google和Apple拒绝。 – JesseMonroy650

回答

0

运行PHP没有必要改变在服务器端的东西,而访问来自科尔多瓦的应用程序。跨域策略不适用,因为请求超过file://而不是http。然而,在科尔多瓦config.xml中,你将需要添加您访问到这样的白名单域名 -

<access origin="http://example.com" /> 

你可以阅读更多关于它在这里 - https://cordova.apache.org/docs/en/latest/guide/appdev/whitelist/index.html

+0

config.xml已经有:但问题是有一个白名单在服务器上实现。 –

+0

您是否正在使用浏览器进行测试? – Sam

+0

您也可以在服务器上完全禁用CORS。它不应该产生效果。 – Sam

1

如果你可以改变服务器限制可以像你说的那样添加另一个域,你可以在某个URL上放置一个代理服务器,让Cordova应用程序与该服务器通话并让代理服务器调用服务器,然后该服务器看起来应该来自列入白名单的域。

不理想,但考虑到你描述的限制,这是一个可行的选择。

您可以使用Node/Express作为代理,或配置nginx,如果熟悉PHP,可以使用PHP,但有几个选项。

您可能还想在代理上启用CORS,以确保在浏览器中测试Cordova应用程序时不会遇到跨源问题。

+1

即使我这样做,我也会允许CORS访问服务器的每个域,只是通过代理而不是直接访问。但我只想让几个域的CORS访问服务器,并允许访问Cordova应用程序。 –

+0

您可以通过配置来限制CORS域,然后可能还会有某种应用程序可以生成的令牌以及服务器为Cordova应用程序进行验证。 –