2016-11-11 5 views
0

私はHerokuでExpressアプリケーションを使用しています。別のNodeJSアプリケーションからRESTfulなリクエストを作成しようとしています。プリフライト要求への応答がアクセス制御チェックに合格しないNodeJS/Heroku/Express

ここでHerokuのアプリからの抜粋だが、app.jsと呼ばれる:

var express=  require("express"); 
app.get("/results",function(req,res){ 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS"); 
}); 

そして、ここでは、私がローカルで実行アプリ、local-app.jsからの抜粋です:

var request=  require("superagent"); 
var req=   request.get("http://url-to-app-js.com?query=1").set(
    "Access-Control-Allow-Origin", "http://url-to-app-js.com", 
    "Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS", 
    "Access-Control-Allow-Headers", "Content-Type, Authorization, Content-Length, X-Requested-With" 
); 
req.end(function(err,res){ 
    // do things 
}); 

私はlocal-app.jsを実行すると、私はこれを得ましたブラウザのコンソールでエラーが発生しました:esponse to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

私はブラウザ「Chromium」を特定のセキュリティの設定は無効になっていますが、私はそうすることなくこれを実行できる必要があります。

私は間違っていますか?どうすれば修正できますか?

+0

これはこれまでに実現しましたか? –

答えて

0

Access-Control-Allow-OriginAccess-Control-Allow-Methods、およびAccess-Control-Allow-Headers応答ヘッダです。彼らは要求に全く現れてはいけません。

標準以外のヘッダーを追加すると、単純な要求ではなく、事前に照会された要求が行われます。 (あなたはそれを事前に実行された要求にするために別の何かをしているかもしれませんが、余分なヘッダは間違いなく助けになります)。

プリフライトされたリクエストは、実際に行いたいリクエスト(この場合はGET)を行う前にCORSによって許可されているかどうかを調べるOPTIONSリクエストを送信します。

GET要求を受信したときにのみCORS応答ヘッダーを設定します。あなたはOPTIONSリクエストに応答しないので、ブラウザはGETリクエストを拒否します。

+0

これを修正するには何を変更する必要がありますか? (私はこの種のヘッダーにはあまり慣れていません...) – Username

+0

先頭から**ヘッダーを設定しないでください。** – Quentin

+0

これが機能しない場合は、OPTIONSを処理するコードを記述してください要求。 – Quentin

関連する問題