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-inlineunsafe-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

如何用管道翻译 Ionic/Angular 中 *ngFor 循环的返回

提高查询速度Ionic / Laravel Post请求

Angular&Ionic HTTP 超时设置

Angular 6 对 .NET Web API 的跨域 POST 请求返回 401(未经授权)