IonicApp angularjs $ http post适用于WIFI,但不适用于某些移动数据

时间:2017-02-18 13:34:03

标签: angularjs apache ionic-framework slim-3

我有一个离子角度应用程序,可以对Slim3框架远程URL(http://xxx.cloudapp.net/xxx/api/v1/login/username/password)发出请求,但我总是得到404状态代码,如屏幕截图所示

screenshot

即使我在不​​同的IP地址中托管REST API,也会发生同样的情况。

我已经检查了所有的结果,我已经看到了添加我已经完成的cordova-whitelist插件的解决方案,但仍然存在错误(甚至删除并添加插件再次删除并添加Android平台)。我甚至设置了CORS。

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin, Content-Type,x-www-form-urlencoded, x-xsrf-token, X-Auth-Token , Authorization');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');      
header('Access-Control-Allow-Methods: POST, GET, DELETE, OPTIONS, PUT');        

最大的困境是,当我使用Chrome浏览器,Postman进行测试时,应用程序工作正常,当安装的APK文件和手机处于WIFI时,当我使用来自不同的移动数据时,它也能正常工作移动提供商,但拥有此IP的移动服务提供商除外(172.22.2.38:8080)。

另一个奇怪的事情是,当我在(172.22.2.38:8080)中使用从Play商店下载的Advanced Rest API发送帖子请求时,只要我设置Body->类型,请求就会返回200状态代码到'x-www-form-urlencoded'。因此,当我使用angularjs $ http。

的post请求时,问题似乎就出现了

这是androidManifest.xml(其中的一部分)

<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="25" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

和config.xml看起来像这样(部分)

<access origin="*" subdomains="true"/>
<allow-navigation href="*"/>

<plugin name="cordova-plugin-device" spec="~1.1.3"/>
<plugin name="cordova-plugin-console" spec="~1.0.4"/>
<plugin name="cordova-plugin-splashscreen" spec="~4.0.0"/>
<plugin name="cordova-plugin-statusbar" spec="~2.2.0"/>
<plugin name="ionic-plugin-keyboard" spec="~2.2.1"/>
<plugin name="cordova-plugin-whitelist" spec="https://github.com/apache/cordova-plugin-whitelist.git"/>
<plugin name="cordova-plugin-contacts" spec="~2.2.1"/>
<plugin name="cordova-plugin-camera" spec="~2.3.1"/>
<plugin name="cordova-plugin-media-capture" spec="~1.4.1"/>
<plugin name="cordova-plugin-file" spec="~4.3.1"/>
<plugin name="cordova-plugin-file-transfer" spec="~1.6.1"/>

我被困了将近两个星期,我们将非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

问题在于代理,我必须在虚拟主机conf中执行此操作(/etc/apache2/sites-available/000-default.conf)。

    ProxyRequests On
    ProxyVia On
    ProxyTimeout 60
    <Proxy "*">
            Order allow,deny
            Allow from all
    </Proxy>

如果我向远程服务器发出帖子请求,那么这个效果很好。

答案 1 :(得分:0)

试试这个。 在Config.xml中,允许访问&amp;导航到您的域:

<access origin="http://yourdomain1.com" />
<allow-navigation href="http://yourdomain1.com" />

然后在index.html中,添加Content-Security-Policy,如下所示:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' http://yourdomain1.com  data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline';  media-src *;  script-src 'self' 'unsafe-eval' 'unsafe-inline';">

http://yourdomain1.com替换为您要拨打的服务器网址