1

カスタム REST エンドポイントで「Access-Control-Allow-Origin」を設定していますが、この Web サービスを JavaScript から呼び出すと、次のエラーが発生します。

XMLHttpRequest cannot load http://10.239.12.22:8042/LATEST/resources/repoUIFacet?rs:q=TNF. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://gprulcd707873.abbvienet.com:8000' is therefore not allowed access. The response had HTTP status code 401.

以下は、応答ヘッダーを設定するコードです

(: Function responding to GET method - must use local name 'get':)
declare function repoUIFacet:get($context as map:map, $params  as map:map) as document-node()*
{
    let $output-types := map:put($context,"output-types","application/json")

    let $_ := xdmp:add-response-header("Access-Control-Allow-Origin", "*")
    ...
};

OPTIONS リクエストのレスポンス ヘッダーを設定するにはどうすればよいですか?

4

3 に答える 3

2

興味のある方は、MarkLogic カスタム rest-api の前にカスタム Web サービス レイヤーを記述する代わりに、私が行ったことを以下に示します。
私は基本的に、カスタム Marklogic エンドポイントへのプロキシとして機能する Apache サーバーを持っています。次に、CORS ヘッダーを設定します。また、OPTIONS リクエストをキャッチし、200 を送信します。リクエストに承認がある場合にお知らせします。「*」Access-Control-Allow-Origin *は機能しません..ホストを指定する必要があります..正規表現を配置する回避策を実行しました.Apache構成または.htaccessファイルでそれを行う方法は次のとおりです

 <IfModule mod_headers.c>
    SetEnvIf Origin "^http(s)?://(.+\.)?(YOUR_DOMAIN.com)(:[0-9]+)?$" origin_is=$0
    Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is
    Header always set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS"
    Header always set Access-Control-Max-Age "1000"
    Header always set Access-Control-Allow-Headers "X-Requested-With, content-type, Access-Control-Allow-Origin, Authorization, X-User-Id"
  </IfModule>

  RewriteEngine on
  RewriteCond %{REQUEST_METHOD} OPTIONS
  RewriteRule ^(.*)$ $1 [R=200,L]

  ProxyPass /cr_dev http://10.239.12.22:8042/LATEST/resources
  ProxyPassReverse /cr_dev/ http://10.239.12.22:8042/LATEST/resources
于 2016-03-24T13:33:51.107 に答える
2

エラー メッセージは で終わりますThe response had HTTP status code 401。これは、アクセス制御ヘッダーではなく、認証の問題です。資格情報を送信するか、アプリ サーバーをアプリケーション レベルの認証に切り替える必要があります。

チッ!

于 2016-03-23T05:52:25.400 に答える