2016-10-17 5 views
0

私はクロスオリジンドメインリクエストに対して簡単なタスクを持っています。私は '/ redirect'へのルートを持つサンプルエクスプレスアプリケーションを作成しました。 "http://www.google.com"フロントエンドでは、onclickイベントを持つボタンを作成しましたが、これは '/ redirect'を要求します。あなたが有効にするためにサーバーを使用することはできません要求されたorginに 'Access-Control-Allow-Origin'ヘッダーがありません

<html> 
 
    <head> 
 
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 
 
    <script type="text/javascript"> 
 
     var app = angular.module('myApp',[]); 
 
     app.controller('crtl',function ($scope,$http,$timeout){ 
 
     $scope.fun1 = function(){ 
 
      $http({ 
 
      method: 'GET', 
 
      url: '/redirect' 
 
      }).then(function successCallback(response) { 
 
       // console.log(response.data) 
 
       console.log("got the request for redirect"); 
 
      }, function errorCallback(response) {}); 
 
     } 
 
     }); 
 
    </script> 
 
    </head> 
 
    <body ng-app="myApp" ng-controller="crtl"> 
 
    <center><br/> 
 
     <button ng-click="fun1()" class="btn">Click Me</button> 
 
    </center> 
 
    </body> 
 
</html>

+1

あなたの 'res.redirect()'はブラウザに301または302の応答を送り、ブラウザに 'http:// www.google.com'をロードするように指示します。ブラウザがそれをしようとすると、それは特権を持たないクロスオリジンに実行されます。それは期待どおりに働いています。 URLがリダイレクトから来たという事実は何も変わらない。あなたは実際に何を達成しようとしていますか?そして、なぜこれがうまくいくと思いますか? – jfriend00

+0

@ jfriend00ご返信ありがとうございます。リクエストを他のドメインにリダイレクトしたい –

答えて

0

:フロントエンドの

app.get('/redirect',function(req,res){ 
 
    res.redirect("http://www.google.com"); 
 
})

コードは、私は、サーバー側で持っています指別のドメインへのクロスドメインアクセスを可能にします。ブラウザは単にそのように動作しません。ブラウザには、アクセスしようとしているドメイン(例ではwww.google.com)がクロスドメインアクセスを可能にするドメインである必要があります。

res.redirect()は、ブラウザに別のソースからコンテンツを取得するように指示します。ブラウザにそのコンテンツを取得するためのクロスオリジンの権利がない場合、res.redirect()はブラウザに直接アクセスしようとするよりもうまく動作しません。

クロスオリジンコンテンツを独自のiframeに埋め込み、そこにコンテンツを表示することはできますが、同じクロスソースの理由で自分のJavaScriptからコンテンツにアクセスすることはできません。

サーバーからコンテンツをプロキシすることができます。つまり、コンテンツを取得するようにサーバーに依頼することができ、サーバーはドメインを取得してブラウザに返します。これはいくつかの用途で有効ですが、あなたのニーズを満たすかどうかは、コンテンツ(あなたの質問に共有していないもの)を使って何をしようとしているかによって異なります。

+0

私はローカルマシンからtwitter(https://api.twitter.com/oauth/authenticate)をリダイレクトしようとしました。私のブラウザはエラー[api.twitter.com/oauth/authenticate?oauth_token=0dUdSAAAAAAAxTp-AAABV9iJi3I]を報告しています。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。 Origin 'http://127.2.1.1:1234'はアクセスが許可されていません。 –

関連する問題