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",
どうすれば解決できますか?
アドバイスをありがとう
ふむ、私はちょうど同じ問題に遭遇しました:ヘッダーはそれがフェッチされたことを示唆しています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-inline
とunsafe-eval
が必要です。
data: gap: https://ssl.gstatic.com
はiOSでのみ使用されます。
self
は、index.html
ファイルの現在のホストを意味します。
リクエストを機能させるには、独自のリクエストを追加する必要があります。標準でない場合は、プロトコルとポートを追加することを忘れないでください
メタタグが必要ない場合はスキップできますが、ホワイトリストプラグインから多くの警告が表示されます。
これを構成する方法の詳細については、 プラグインのreadme を参照してください。
次に、アプリを再構築すると、再び機能するはずです。
私もこの問題を抱えていて、たくさん検索して、ついに...ホワイトリストプラグインを削除しました:
cordova plugin remove cordova-plugin-whitelist
その後、それを再インストールしました
cordova plugin add cordova-plugin-whitelist
それは私を助け、それがあなたの問題を解決することを願っています
私はこれにかなり長い間苦労しましたが、トリックはプラグインをインストールし、index.htmlでCSPを構成してから、プラグインを削除して再度追加することでした。