2017-08-16 4 views
0

MarkLogicを使用して認証しようとしています。 xdmp:loginメソッドを使用していますが、MarkLogicとPostmanのクエリコンソールでうまく動作しています。MarkLogic CORSエラー

しかし、私はMarkLogicのログイン機能を呼び出すとき、ブラウザで、それはエラーの下に投げている:

Error: XMLHttpRequest cannot load http://172.16.32.154:8000/v1/eval . 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:9001 ' is therefore not allowed access. The response had HTTP status code 405.

+1

[プリフライトリクエストに対する応答がアクセス制御チェックをパスしない](https://stackoverflow.com/questions/35588699/response-to-preflight-request-doesnt-pass-access-control-check)の可能な複製 –

+0

*応答にはHTTPステータスコード405 *があります。*は、サーバーがおそらくOPTIONS要求を許可して応答するように構成されていない可能性があることを示します。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requestsには、ブラウザがここでやっていることの詳細があります。しかし、その要点は、サーバーは、200または204と空の応答本文と正しいCORS Access-Control-Allow - \ *応答ヘッダーでOPTIONS要求に応答するように構成する必要があるということです。 – sideshowbarker

答えて

2

問題は、別の場所への要求をしようとして1つの場所からダウンロードしたクライアント側のJSを持っています。これは、Access-Control-Allow-Originエラーの不可欠な部分です。

localhost:9001(MarkLogic以外のもの)のアプリサーバーからコンテンツを提供していて、http://172.16.32.154:8000(MarkLogic)をヒットしようとしているようです。これはあなたのアーキテクチャーに問題を示唆しています.MarkLogicのインスタンスは誰でも直接攻撃することができます。それはa poor idea from a security point of viewであることが判明しました。

localhost:9001のホストとは何ですか? MarkLogicのアプリケーションサーバーは、localhost:9001から提供しているものだけでなく、/ v1/evalを介して送信しようとしているロジックを管理するモジュールをホストすることもできます。

例を見てみましょう。モジュールにファイルシステムを使用するMarkLogicアプリケーションサーバーがあるとします(モジュールデータベースを使用することが望ましいことに注意してください)。あなたがそのアプリケーションサーバーのルートを持っている場所の配下に、あなたが持っている可能性があり:

  • JS/
  • CSS/
  • index.htmlを
  • API/"API" では

ディレクトリには、/ v1/evalに送信しようとしているものを実行するlogin.xqyまたはlogin.sjsというXQueryまたはJavaScriptモジュールがあります。理にかなっている?