Ionic + Angular - POST请求后如何避免“404 Not Found(from cache)”?

时间:2015-05-11 07:32:28

标签: javascript php angularjs post http-status-code-404

这个问题部分指向了我之前的问题: Ionic + Angular POST request return state 404

但我无法找到有效的解决方案。

问题如下:

如果我从设备上运行的移动应用程序请求我总是得到回复404:

Request Method:POST
Status Code:404 Not Found (from cache)
Request Headersview source
Accept:application/json, text/plain, */*
Content-Type:text/plain
Origin:file://
User-Agent:Mozilla/5.0 (Linux; Android 4.4.2; Lenovo Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
Request Payloadview source
{,…}

但是,如果我在Chrome浏览器中使用Postman插件在桌面上尝试相同的请求,我总是得到带有我需要的数据的响应200。

我认为这是由Angular http方法引起的问题,但在上一篇文章中我注意到这不是真的。

我怎么能避免这个?我应该在应用程序的HTML中,在请求期间还是在服务器端(PHP)设置一些标题?

非常感谢任何建议。

修改

我尝试通过这种方式设置cache:false:

$http({
                method : 'POST',
                url : $scope.remoteUrl,
                data: postData,
                headers: headersData,
                cache: false,
                timeout: 10000
                // success response
            })

但没有运气。

5 个答案:

答案 0 :(得分:55)

lot of peopleexperiencing that

我遇到了同样的问题。它似乎与新版Cordova中的新安全策略有关。

以下是我如何解决的问题:

我安装了Cordova's whitelist plugin

cordova plugin add cordova-plugin-whitelist

然后,在您的index.html中添加您的内容政策作为元标记(使用您自己的主机或' *'接受所有请求):

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

default-src用于一般请求; ws://localhost:35729主机用于ionic serve中的实时重新加载。

script-src用于安全脚本执行

为了使角度正常工作,

unsafe-inlineunsafe-eval是必需的。

data: gap: https://ssl.gstatic.com仅在iOS上使用。

self表示index.html文件的当前主机。

  

您必须添加自己的内容才能使您的请求生效。如果他们是非标准的

,请不要忘记添加协议和端口      

如果您不想要它,可以跳过元标记,但是您会从白名单插件中收到很多警告。

有关如何在the plugin's readme中配置此内容的详细信息。

然后重建你的应用程序,它应该再次运行。

答案 1 :(得分:31)

有同样的问题,没有任何帮助,然后我刚刚删除了白名单插件:

cordova plugin remove cordova-plugin-whitelist

然后安装它

cordova plugin add cordova-plugin-whitelist

然后它起作用了

答案 2 :(得分:4)

我遇到了同样的问题,我可以通过添加以下插件来解决它:

ionic plugin add https://github.com/apache/cordova-plugin-whitelist.git

答案 3 :(得分:3)

经过几个小时,我找到了一个有效的解决方案: 运行cordova plugin add cordova-plugin-whitelist

在我的情况下,我已经在源上配置了config.xml和index.html,如此处和其他地方所述。

答案 4 :(得分:2)

我的Android设备上有Firebase登录的类似问题,但我可以在浏览器上登录。

cordova plugin remove cordova-plugin-whitelist
cordova plugin add cordova-plugin-whitelist

使用上述行解决问题。