我刚刚更新了Angular + Ionic上的新版本以及处理远程请求停止工作的方法,并且总是返回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
{,…}
正在处理远程请求的方法的代码如下:
// set transfer credentials
$http({
method : 'POST',
url : $scope.remoteUrl,
data: {img_base64: "/9j/4AAQSkZ"},
headers: 'application/json',
timeout: 10000
// success response
}).success(function(data, status, headers, config) {
//SUCESSS
} else {
//PROCESSING ERROR
}
// error response
}).error(function(data, status, headers, config) {
// ERROR
});
我尝试使用此主题解决它:
AngularJs $http.post() does not send data
和
Angular + Ionic Post request getting 404 not found
但没有运气。
服务器端通过这种方式处理请求:
$inputJSON = file_get_contents('php://input');
$input= json_decode( $inputJSON, TRUE ); //convert JSON into array
如果我试图使用Postman或Curl发送请求,似乎一切正常。
离子信息:
Node Version: v0.12.2
Cordova CLI: 5.0.0
Ionic CLI Version: 1.3.22
Xcode version: Xcode 6.3.1 Build version 6D1002
ios-sim version: Not installed
ios-deploy version: Not installed
AngularJS版本:
"version": "1.3.13",
我该如何解决?
非常感谢任何建议
答案 0 :(得分:40)
from cache
......但实际上,它似乎与新版本的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-inline
和unsafe-eval
是必需的。
data: gap: https://ssl.gstatic.com
仅在iOS上使用。
self
表示index.html
文件的当前主机。
您必须添加自己的内容才能使您的请求生效。如果他们是非标准的
,请不要忘记添加协议和端口如果您不想要它,可以跳过元标记,但是您会从白名单插件中收到很多警告。
有关如何在the plugin's readme中配置此内容的详细信息。
然后重建你的应用程序,它应该再次运行。
答案 1 :(得分:5)
我也遇到了这个问题并且搜索了很多,最后...... 我删除了白名单插件:
cordova plugin remove cordova-plugin-whitelist
然后安装它
cordova plugin add cordova-plugin-whitelist
它帮助了我并希望它能解决你的问题
答案 2 :(得分:1)
我在这方面挣扎了很长时间,但诀窍是安装插件,在index.html中配置CSP然后删除插件并再次添加它。
答案 3 :(得分:-2)
响应状态中的(from cache)
表示您的浏览器缓存了错误回复并正在播放给您。尝试清除缓存或使用任何缓存清除技术。