Ionic + Angular - 如何避免POST请求后出现“404未找到(来自缓存)”?

这个问题部分指向我之前的问题:Ionic + Angular POST请求返回状态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
            })

但是没有运气。


答案 1

很多人都在经历这一点

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

以下是我如何解决它:

我安装了Cordova的白名单插件

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:35729ionic serve

script-src用于安全脚本执行

unsafe-inline并且是角正常工作所必需的。unsafe-eval

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

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

您必须添加自己的请求才能正常工作。如果协议和端口是非标准的,请不要忘记添加它们

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

有关如何在插件的自述文件中配置此内容的更多信息。

然后重新生成你的应用,它应该会再次工作。


答案 2

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

cordova plugin remove cordova-plugin-whitelist

然后重新将其重新安装

cordova plugin add cordova-plugin-whitelist

然后它工作了