2016-12-29 8 views
0

私はイオンプロジェクトを開発しており、POSTとGETリクエストごとにヘッダーパラメーターを使用しています。どのように私はAndroidの電話でプロジェクトをテストし、私のアンドロイドデバイスを通じて私のサーバーに来るすべての要求を監視するときに問題はありません。しかし、イオンプロジェクトをデプロイしてWebブラウザ(Chromeウェブブラウザ)でテストすると、各リクエストは2回実行されていることがわかります(POSTメソッドを使用するとヘッダーがなく、入力がなく、2つ目はすべてparams)。 毎回要求を無視するヘッダーパラメーターがない場合は、サーバーで解決しました。どうすれば$ http(POSTとGET)の重複した実行を防ぐことができますか? これらのパラメータは、angular.config jsファイルで設定しました。

$httpProvider.defaults.headers.common['Accept'] = 'application/json; q=0.01'; 
$httpProvider.defaults.headers.common['Authorization-Token'] = value; 

と私のPHPサービスが最初の要求がプリフライトです

header("Access-Control-Allow-Origin: *"); 
header("Access-Control-Allow-Headers: Content-Type, Authorization-Token"); 
header('Access-Control-Max-Age: 60'); 
header('Access-Control-Allow-Methods: ["GET","POST"]'); 
header("Content-Type: application/json; charset=UTF-8"); 
+0

は、プリフライトリクエスト中でCORSのようですね。初めてOPTIONSメソッドを呼び出すと、再びPOSTメソッドまたはGETメソッドを呼び出す –

+0

実際の呼び出しを行うメソッドを確認する必要がある –

+0

サービス側からのエラー – Shiva

答えて

1

OPTIONコールのように聞こえます。

実際のコール(ポスト/取得/何でも)を実行する前に、リソースに許可されているアクションをサーバーにチェックするだけです。

これと同様の質問への答えをチェック:Angular 2 HTTP POST does an OPTIONS call

+0

ありがとうございます。リクエストがプレ・フライトだった場合は、早めにWebサービスで終了できますか?次のようなものがあります。 if($ request_type == "pre-flight")return; –

+0

間違いなく可能です。 サーバサイドを使用するフレームワークに応じて、実装は少し異なります。 私はLaravelを好み、$ request-> method()== 'options'を持つミドルウェアでキャッチします。あるいは普通のPHP $ _SERVER ['REQUEST_METHOD'] == 'OPTIONS'です。 オプションを呼び出すだけで、開発者にキャッチを追加させることだけでなく、アプリケーションが許可する操作を定義するために返す必要のあるヘッダーがあります。 基本:https://en.wikipedia。org/wiki/Cross-origin_resource_sharing /、extensiceの説明https://www.html5rocks.com/en/tutorials/cors/ – CommonToast

+0

大変ありがとうございます。問題なく動作します:) 間違いなく最高の答えです! –

0

から始まります。 これはブラウザのメカニズムの一部です。 あなたはそれを避けることはできません。

0

ブラウザがCORSをどのように管理するかは、すべて説明しています。ブラウザでは、単純なものではない(つまりGETリクエスト)、クロスドメイン要求をJavaScriptで行うと、ブラウザは自動的に指定されたURL/URIへのHTTP OPTIONS要求を行い、 "飛行前の"リクエストまたは "約束" 。リモートソースは、それが応答ヘッダに受け入れるかについてHTTPステータス200のコードと関連する詳細情報を返している限り、ブラウザは

見てください、元のJavaScript呼び出しで先に行くだろうherehere

+0

ありがとうLugas。リクエストのタイプをチェックすることでWebサービスでそれを防ぐことができますか?それは、フライト前のリクエストの場合、Webサービスが残りのコードを実行しないようにするためです。 (早期終了)のようなものを意味します: if($ request_type == "pre-flight")return; //これ以上実行しない –

+0

私はこれも私の仕事で処理し、リクエストの開始前に確認できるものを探していますが、ここには結果はありません。 もっと良いものが見つかると、すぐに... \ @AhmedK –

関連する問題