我刚刚更新了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 });
但是没有运气。
服务器端通过这种方式处理请求:
$inputJSON = file_get_contents('php://input'); $input= json_decode( $inputJSON, TRUE ); //convert JSON into array
如果我试图使用邮递员或卷曲发送请求,一切似乎都在工作。
离子信息:
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",
我该如何解决?
非常感谢您的任何建议
哼,我只是遇到了同样的问题:标头表明它已经被拿走了from cache……但是实际上,它似乎与新版本的Cordova中的新安全策略有关。
from cache
这是我解决的方法:
我安装了Cordova的白名单插件:
cordova plugin add cordova-plugin-whitelist
然后,将您的内容策略添加index.html为meta标签(使用您自己的主机或“ *”来接受所有请求):
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。
default-src
ws://localhost:35729
ionic serve
script-src 用于安全脚本执行
script-src
unsafe-inline并且unsafe-eval是角钢正常工作所必需的。
unsafe-inline
unsafe-eval
data: gap: https://ssl.gstatic.com 仅在iOS上使用。
data: gap: https://ssl.gstatic.com
self表示index.html文件的当前主机。
self
您必须添加自己的才能使请求生效。如果它们不是标准的,请不要忘记添加协议和端口 如果不想,可以跳过meta标签,但是白名单插件会给您很多警告。
您必须添加自己的才能使请求生效。如果它们不是标准的,请不要忘记添加协议和端口
如果不想,可以跳过meta标签,但是白名单插件会给您很多警告。
有关如何在插件的自述文件中进行配置的更多信息。
然后重建您的应用程序,它应该可以再次运行。