2016-03-21 5 views
0

http://localhost:9000で動作するAngularJSアプリケーションがあります。フロントエンドのアプリはhttp://localhost:8088に対してhttpリクエストを行います。ですから、私は応答ヘッダーにCORSをセットアップしなければなりませんでした。私は// localhostを呼び出していながらリダイレクトを行うとブラウザコンソールにエラーが発生しました。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
    next(); 
}); 

すべてが正常に動作します:

delete $http.defaults.headers.common["X-Requested-With"]; 
$http.defaults.headers.common["Accept"] = "application/json"; 
$http.defaults.headers.common["Content-Type"] = "application/json"; 

サーバー側で

(ExpressJS):

私はクライアント側に追加9000 - > // localhost:8088。しかし、別のURL(//api.example.com/authorize)にリダイレクトすると、ブラウザのコンソールで次のエラーが表示されます。XMLHttpRequestは//api.example.com/authorize?response_type=codeをロードできません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。したがって、原点「ヌル」はアクセスが許可されません。

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
    next(); 
}); 

app.get('/authorize', function (req, res) { 
    var response = 'https://api.example.com/authorize?response_type=code'; 
    res.redirect(response); 
}); 

あなたはそれが間違っていることを知っていますか?

+0

ええ、問題は、https://api.example.comがAccess-Controlヘッダーに応答していないことです。 – idbehold

答えて

0

問題がリダイレクトとCORSと関係しているようです。 301,302,303,307、または308のステータスコードを使用してリダイレクトすると、エラーが発生します。 これは変更されていますが、リダイレクトを使わずに、応答ヘッダーや本文にリダイレクトURLを返すなどの回避策が必要です。

これはよくそこから引用このother reply

で説明されています。

ブラウザが追いつくまでは、唯一の実行可能なオプションは、1つまたはの 組み合わせているようだ:

  1. 問題は単純なリクエストの場合のみリダイレクトされます。
  2. ロケーションヘッダーに独自のURLを「プロキシ」として305リダイレクトを発行します。 305は が推奨されていないため、限られたブラウザサポートのために準備してください。
  3. 偽物が "リダイレクト" ですか:メタリフレッシュおよび/またはJavascriptの場所の変更に
    • リターンHTMLを。
    • iframeのソースとしてリダイレクトターゲットを持つビューポートを埋め込むiframeを持つHTMLを返します。
    • コンテンツにアクセスするためにユーザーがクリックする必要があるリンクを表示します。私が何をしたか最後に

は、クライアント側のリンクを入れていた、私はそれが最も簡単でクリーンだと思います。

関連する問題