2016-02-09 4 views
5

私は非常に単純なJSON APIをJavaで作成しています。実際にはオブジェクト座標を扱うProject Zomboidのmodです。これは私のHTTPハンドラがどのように見えるかです:CORSヘッダー 'Access-Control-Allow-Origin'が一致しませんでしたが、それがあります!

public class JSONZomboid implements HttpHandler 
{ 
    @Override 
    public void handle(HttpExchange t) throws IOException { 
     // HEADERS 
     Headers headers = t.getResponseHeaders(); 
     headers.set("Content-Type", "text/json"); 
     headers.set("Access-Control-Allow-Origin", "pzmap.crash-override.net");     
     t.sendResponseHeaders(200,0); 
     //BODY 
     OutputStream os = t.getResponseBody(); 
     os.write("{\n".getBytes()); 
      // generate JSON here 
     os.write("}".getBytes()); 
     os.close(); 
    } 
} 

は私が接続するためにCORSを有効にする必要があることを意味userscriptを使用して、プロジェクトZomboidマッププロジェクトにこれをロードします。これは、簡単なコードを介して行われます:

PlayerRenderer.prototype.fetchInfo = function() { 
    $.get("http://127.0.0.1:8000/test", {}, this.displayPoints.bind(this)); 
} 

しかし、私はこのエラーを取得する:

warning http://images.michaelsync.net/images/2007/09/warningicon.png Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://127.0.0.1:8000/test . (Reason: CORS header 'Access-Control-Allow-Origin' does not match 'pzmap.crash-override.net').

でもコンソールで、私ははっきりとエラーが誤解を招くおそれがあり見ることができます:

image description

場合私はCORSがまだ嫌いではなかったが、今はそれを嫌うようになるだろう。許可元ヘッダーに含まれる実際の文字列は何ですか?

+2

ヘッダーには、コンテンツへのアクセスが許可されているサイトのホスト名が必要です。 'pzmap.crash-override.net'でホストされているサイトからあなたのページを読み込んでいるなら、それはうまくいくはずです。エラーは、ヘッダーに含まれている内容を示していますが、ソースドメインの内容ではありません。 – Pointy

+1

リクエストヘッダー( 'Origin'と' Referer')でロード先のサイトを見ることができます。 –

+0

実際には、小さな画面上でそれらの画像の詳細を見ることは非常に難しいです:/ – Pointy

答えて

1

上記のコメント1は正しいです。CORSでは、Access-Control-Allow-Originヘッダーが(エンドツーエンドSSLエクスペリエンスの)クライアントの元の要求と一致する必要があります。したがって、この場合は、Access Control-Allow-Originヘッダーにpzmap.crash-override.netを設定してください。

2つのノート:あなたがオンラインで読むことが何にもかかわらず

1-、nginxのは、現在、別の行としてリストされるように複数のエントリを必要とし、ラ: はadd_headerアクセス​​制御 - 許可 - 起源「https://developers.google.com」; add_headerアクセス​​制御許可元 "https://imasdk.googleapis.com";

2 - また、オンラインで読むことができるものの、ワイルドカードの使用は問題ありません。すべてのクライアント(ブラウザを意味します)が許可しているわけではありません。