2017-08-16 11 views
0

私のリアクションアプリからリモートでホストされているWeb APIにアクセスする必要があります。サーバー側では、私は、クロスドメイン通信を許可するには、以下のなかった:'Access-Control-Allow-Origin'ヘッダーを設定できません

import javax.ws.rs.core.Response; 
import com.mypackage.ResponseDto; 

@Override 
public Response fetch(String id, String env) throws ServiceException 
{ 
    ResponseDto res = new ResponseDto(); 
    res = updateResp(id, env); // not important 

    return Response.ok().header("Access-Control-Allow-Origin","*").entity(res).build(); 
} 

私は郵便配達からチェックすると、私はCORSを正しく以下のように設定ヘッダを参照することができます

access-control-allow-origin →* 
content-type →application/json 
date →Wed, 16 Aug 2017 11:07:16 GMT 
server →web 
transfer-encoding →chunked 

しかし、私から同じエンドポイントにアクセスするとき反応するアプリのブラウザは以下のエラーで苦情を出します:

Fetch API cannot load http://myservices.com/myservice-app/services/ . Response 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. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled

何が起こっているのですか?

編集#1 まだ同じエラーを参照してください変更するには、以下のなかった:

return Response.ok() 
      .header("Access-Control-Allow-Origin", "*") 
      .header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS") 
      .header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With") 
      .entity(response).build(); 
+0

OPTIONSリクエスト(ブラウザはこの「プリフライト」リクエストとして送信するものです)への応答にヘッダーを追加する必要があります。GETまたはPOSTではありません。多分それは問題ですか? –

+0

OPTIONS要求を受信したときのサーバの応答はどのようになりますか?これは次の要求の前に送信されます – Ferrybig

+0

["要求されたリソースには" Access Control-Allow-Origin 'ヘッダがありません "] https://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-quest-resource) – Ferrybig

答えて

0

私はあなたが使用しているものは何でもJavaライブラリとの経験がないが、このような何かが働かなければならない:

@Override 
public Response options() throws ServiceException 
{ 
    ResponseDto res = new ResponseDto(); 

    return Response.ok().header("Access-Control-Allow-Origin","*").entity(res).build(); 
} 

のようにライブラリが動作している場合は、サーバに送信するOPTIONSリクエストごとに200 OKというメッセージが送信されます(ヘッダAccess-Control-Allow-Origin = *)。それはあなたが目指すべきものです。

+0

これはapi呼び出しにapiにカスタムヘッダー(origin、content-type、accept、authorizationなど)が含まれていない場合にのみ機能しますいくつかのカスタムヘッダーでは、これは動作しません –

関連する問題