web-dev-qa-db-ja.com

Ionic + Angular POSTリクエストリターン状態404

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()はデータを送信しません

そして

Angular + Ionicポストリクエストで404が見つかりません

しかし、運がなければ。

サーバー側はこの方法でリクエストを処理しています:

$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",

どうすれば解決できますか?

アドバイスをありがとう

16
redrom

ふむ、私はちょうど同じ問題に遭遇しました:ヘッダーはそれがフェッチされたことを示唆していますfrom cache...しかし実際には、それは新しいバージョンのCordovaの新しいセキュリティポリシーに関係しているようです。

これが私がそれを解決した方法です:

インストールしました Cordovaのホワイトリストプラグイン

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は安全なスクリプト実行に使用されます

angularが正しく機能するには、unsafe-inlineunsafe-evalが必要です。

data: gap: https://ssl.gstatic.comはiOSでのみ使用されます。

selfは、index.htmlファイルの現在のホストを意味します。

リクエストを機能させるには、独自のリクエストを追加する必要があります。標準でない場合は、プロトコルとポートを追加することを忘れないでください

メタタグが必要ない場合はスキップできますが、ホワイトリストプラグインから多くの警告が表示されます。

これを構成する方法の詳細については、 プラグインのreadme を参照してください。

次に、アプリを再構築すると、再び機能するはずです。

41
Tiesselune

私もこの問題を抱えていて、たくさん検索して、ついに...ホワイトリストプラグインを削除しました:

cordova plugin remove cordova-plugin-whitelist

その後、それを再インストールしました

cordova plugin add cordova-plugin-whitelist

それは私を助け、それがあなたの問題を解決することを願っています

5

私はこれにかなり長い間苦労しましたが、トリックはプラグインをインストールし、index.htmlでCSPを構成してから、プラグインを削除して再度追加することでした。

1