Ionic + Angular POST 请求返回状态 404
Posted
技术标签:
【中文标题】Ionic + Angular POST 请求返回状态 404【英文标题】:Ionic + Angular POST request return state 404 【发布时间】:2015-07-19 07:32:27 【问题描述】:我刚刚更新了 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",
请问如何解决?
非常感谢您的建议
【问题讨论】:
【参考方案1】:嗯,我刚刚遇到了同样的问题:标题表明它已被提取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
是 Angular 正常工作所必需的。
data: gap: https://ssl.gstatic.com
仅在 iOS 上使用。
self
表示index.html
文件的当前主机。
您必须添加自己的才能使您的请求生效。如果协议和端口是非标准的,请不要忘记添加它们
如果你不想要,你可以跳过元标记,但你会从白名单插件中得到很多警告。
更多关于如何在the plugin's readme中配置的信息。
然后重新构建您的应用,它应该会再次运行。
【讨论】:
通过使用较新版本的 Phonegap Build 进行构建,艰难地发现了这一点。正在拉扯我的头发,想知道为什么该应用程序在其他设备上运行良好,但在这个特定的 Android 设备上却没有......谢谢。 同样的问题但是这个不行,重新安装cordova-plugin-whitelist已经解决了问题你也可以看看forum.ionicframework.com/t/…【参考方案2】:我也遇到了这个问题,找了好久终于... 我删除了白名单插件:
cordova plugin remove cordova-plugin-whitelist
然后重新安装
cordova plugin add cordova-plugin-whitelist
它帮助了我,希望它能解决你的问题
【讨论】:
【参考方案3】:我为此苦苦挣扎了一段时间,但诀窍是安装插件,在 index.html 中配置 CSP,然后删除插件并再次添加。
【讨论】:
【参考方案4】:(from cache)
响应状态表明您的浏览器缓存了错误的回复并正在播放给您。尝试清除缓存或使用任何缓存清除技术。
【讨论】:
谢谢,但这很奇怪,因为它是设备上的全新安装。您建议我使用哪个?我应该在服务器端添加一些标题吗?以上是关于Ionic + Angular POST 请求返回状态 404的主要内容,如果未能解决你的问题,请参考以下文章
Ionic 2 / Angular 问题与 http post 到 laravel api
Angular 6 - Ionic - 使用拦截器中断 http 请求并返回 json