この質問は、私の以前の質問を部分的に指しています: Ionic + Angular=POST request return state 404
しかし、私は実用的なソリューションを見つけることができませんでした。
問題は次のとおりです。
デバイスで実行されているモバイルアプリからリクエストを行うと、常に応答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
{,…}
しかし、Chrome=ブラウザでPostmanプラグインを使用してデスクトップ上で同じリクエストを試みた場合、必要なデータで常にレスポンス200が返されます。
私はそれがAngular httpメソッドによって引き起こされた問題だと思ったが、以前の投稿で私は真実ではないことに気づいた。
どうすればこれを回避できますか?リクエスト中またはサーバー側(PHP)で、アプリのHTMLにヘッダーを設定する必要がありますか?
アドバイスをありがとう。
編集:
この方法でcache:falseも設定しようとしました:
$http({
method : 'POST',
url : $scope.remoteUrl,
data: postData,
headers: headersData,
cache: false,
timeout: 10000
// success response
})
しかし、運がなければ。
私はちょうど同じ問題に遭遇しました。 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
それは働いた
私は同じ問題を抱えていたので、次のプラグインを追加することで解決できました。
ionic plugin add https://github.com/Apache/cordova-plugin-whitelist.git
数時間後、私は1つの解決策を見つけました。実行cordova plugin add cordova-plugin-whitelist
私の場合、Originでconfig.xmlとindex.htmlをすでに設定していました。これは、ここや他の場所で述べたとおりです。
AndroidデバイスのFirebaseサインで同様の問題が発生しましたが、ブラウザーでログインできました。
cordova plugin remove cordova-plugin-whitelist
cordova plugin add cordova-plugin-whitelist
上記の行を使用して問題を解決しました。