【问题标题】:Ionic + Angular POST request return state 404Ionic + Angular POST 请求返回状态 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",

请问如何解决?

非常感谢您的建议

【问题讨论】:

    标签: javascript ajax angularjs curl


    【解决方案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) 响应状态表明您的浏览器缓存了错误的回复并正在播放给您。尝试清除缓存或使用任何缓存清除技术。

        【讨论】:

        • 谢谢,但这很奇怪,因为它是设备上的全新安装。您建议我使用哪个?我应该在服务器端添加一些标题吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        相关资源
        最近更新 更多