2016-05-09 7 views
1

私はCORSを理解していると思ったが、明らかにわからないことがある。私はlocalhostから実行しようとしているアプリがあります。このアプリはAzure SearchへのリクエストをPOSTする必要があります。私は検索文書をアップロードしようとしています。これを実行しようとする試みで、私は次のようしている: jQuery Ajax - POSTからLocalhostが生成されない 'Access-Control-Allow-Origin'ヘッダ

var url = 'https://my-app.search.windows.net/indexes/test/docs/index?api-version=2015-02-28'; 
$.ajax({ 
    url: url, 
    type: 'POST', 
    contentType:'application/json', 
    headers: { 
    'api-key':'XXXXXX', 
    'Content-Type':'application/json' 
    }, 
    beforeSend: function (req) { 
    req.setRequestHeader('Access-Control-Allow-Origin', '*'); 
    },      
    data: JSON.stringify({ 
    '@search.action':'upload', 
    'id': '1', 
    'name': 'some name' 
    }), 
    success: function() { alert('success'); }, 
    error: function() { alert('check the console window.'); } 
});     

は確かに、 urlapi-keyは本物ではありません。 POSTmanを使用していれば、このデータを正常にPOSTできます。

Failed to load resource: the server responded with a status of 403 (Forbidden) 

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:72' is therefore not allowed access. The response had HTTP status code 403. 

を私は "に設定私のAzureの検索サービスの「可原点タイプ」CORSのオプションを持っている:私はjQueryを介して、私のアプリからそれを投稿しようとすると、しかし、私は言うコンソールウィンドウでエラーが出ますすべて"。だから、基本的に、その広いオープン。しかし、私はまだこのCORSエラーを取得します。

localhostのjQueryからこのサービスにデータをPOSTするにはどうすればよいですか?

+0

私には、403(禁止された)応答が本物の鍵だと思われます。 CORSをサポートしていないエラーページにリダイレクトされている可能性があります。 'api-key'が正しいと確信していますか?ブラウザの* Network *コンソールで送信されたリクエストヘッダを確認してください。 – Phil

+0

クライアントに 'Access-Control-Allow-Origin'ヘッダを設定するのは意味がありません。すべての 'Access-Control-Allow-XXX'ヘッダは、サーバの単独責任です。 –

+0

@Phil - 私は 'api-key'が正しいと確信しています。実際には、私は同じサービス上の他のエンドポイントにヒットするために使用しています。私が使用しているキーは主な管理キーなので、すべての特権が必要です。 – user687554

答えて

1

Azure検索では、管理操作または索引付け操作ではなく、CORS経由でのみクエリ操作を実行できます(CORSのAzure Searchサポートの詳細については、MSDNを参照してください)。

これは、ブラウザベースのクライアントがapi-keyにアクセスする必要があり、(インデックスの書き込み操作に必要な)管理キーの共有が本質的に安全でないためです。インデックス内のデータが一般公開されるはずのシナリオでは、公開されたクエリキーは大丈夫ですが、管理APIキーをブラウザベースのクライアントに渡すべきではありません。

関連する問題