2017-08-16 20 views
1

CORSでの基本的なHTTP認証を使用する際に問題があります。同じホスト上で実行されているJava Dropwizard(Jersey)サーバーからHTTP APIを呼び出すノードエクスプレスWebサーバー(UI) 。基本的なHTTP認証を使用するCORS

APIは、HTTP基本認証で保護され、I''veは(この記事から撮影:How to handle CORS using JAX-RS with Jersey):私のジャージーサーバー上で次のフィルタ実装されている私がロードしようとすると、しかし

@Provider 
public class CORSFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(ContainerRequestContext request, 
             ContainerResponseContext response) throws IOException { 
     response.getHeaders().add("Access-Control-Allow-Origin", "http://localhost:9000"); 
     response.getHeaders().add("Access-Control-Allow-Headers", 
       "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With"); 
     response.getHeaders().add("Access-Control-Allow-Credentials", "true"); 
     response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 
    } 
} 

をWeb UIでは、私のコンソールから次のような出力が得られます。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:9000/intraday/parameters. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘http://localhost:9000’) 

私はこのエラーを理解できません。明らかに原点は同じです(http://localhost:9000)ので、なぜ一致しないのか分かりません。

は、私はまた、要求は問題の説明からHTTPコード200

+0

多分これはあなたを助けるかもしれません:https://stackoverflow.com/questions/28065963/how-to-handle-cors-using-jax-rs-with-jersey – sascha10000

+0

@ sascha10000あなたが提供したリンクは同じ投稿ですすでに私の質問にリンクされています。 –

+0

申し訳ありませんが、私はこれがリンクであったことを本当に見ていませんでした... – sascha10000

答えて

1

と答えているすべてのプリフライトオプションは、それがJavaのDropwizard(ジャージー)サーバがhttp://localhost:9000とノード上で実行されているように聞こえることを確認してください作りましたExpress Webサーバー(UI)は別の起点で実行されています。

に関係なく、JerseyサーバーのCORSFilterコードの応答ヘッダーの値を、要求を行っているフロントエンドJavaScriptコードの起点(明らかにノードサーバー)に設定する必要があります。それでは、http://localhost:12345、例えば、それはだ場合:お使いのブラウザはがあればエラーメッセージ「http://localhost:9000/…でリモートリソースを読み込む許可しない」ことを発するだろう方法はありませんので

response.getHeaders().add("Access-Control-Allow-Origin", "http://localhost:12345"); 

それはとにかく、http://localhost:9000以外のものでなければなりませんフロントエンドのJavaScriptコードはhttp://localhost:9000から提供されています。その場合、クロスオリジンリクエストではないため、ブラウザはレスポンスへのアクセスをブロックしません。

関連する問題