1

我有一个 ionic-angularjs 应用程序,它向 Slim3 框架远程 url ( http://xxx.cloudapp.net/xxx/api/v1/login/username/password ) 发出 post 请求,但我总是得到 404 状态代码为在屏幕截图中显示

截屏

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

我已经检查过了,我已经看到了像添加我已经完成的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) 的移动提供商。

另一个奇怪的事情是,当我使用从 Play 商店下载的 Advanced Rest API 发送发布请求时,在 (172.22.2.38:8080) 中,只要我将 Body->Type 设置为“x-”,请求就会返回 200 状态码www-form-urlencoded'。所以问题似乎是当我使用带有 angularjs $http 的发布请求时。

这是 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"/>

我已经被困了将近两个星期,任何帮助将不胜感激。

4

2 回答 2

2

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

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

如果我向远程服务器发出 post 请求,这个可以完美运行。

于 2017-02-28T11:56:03.290 回答
0

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

<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替换为您呼叫的服务器 url

于 2017-02-25T10:58:15.787 回答