web-dev-qa-db-ja.com

Ionic + Angular-「404 Not Found(from cache)」」をPOST request?

この質問は、私の以前の質問を部分的に指しています: 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
            })

しかし、運がなければ。

26
redrom

A 多くの人それを経験している です。

私はちょうど同じ問題に遭遇しました。 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 でこれを設定する方法に関する詳細情報。

その後、アプリを再構築すると、再び機能するはずです。

55
Tiesselune

同じ問題があり、何も助けなかったので、ホワイトリストプラグインを削除しました:

cordova plugin remove cordova-plugin-whitelist

それからそれを放棄しました

cordova plugin add cordova-plugin-whitelist

それは働いた

35

私は同じ問題を抱えていたので、次のプラグインを追加することで解決できました。

ionic plugin add https://github.com/Apache/cordova-plugin-whitelist.git
4
Enayat

数時間後、私は1つの解決策を見つけました。実行cordova plugin add cordova-plugin-whitelist

私の場合、Originでconfig.xmlとindex.htmlをすでに設定していました。これは、ここや他の場所で述べたとおりです。

3
Ewertom Moraes

AndroidデバイスのFirebaseサインで同様の問題が発生しましたが、ブラウザーでログインできました。

cordova plugin remove cordova-plugin-whitelist
cordova plugin add cordova-plugin-whitelist

上記の行を使用して問題を解決しました。

2
Suhas s